Session

Posted -archenemy-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session相关的知识,希望对你有一定的参考价值。

Session

session 运行原理

  1. 接受到客户端的请求后,服务器端就会创建一个 session对象。session对象保存了所有用户的信息.当创建一个session对象时 会产生一个sessionId的一个编号与该session对象关联。

  2. 服务器通过cookie的方式把产生的sessionId 发送到客户端(浏览器)

  3. 当客户端再次请求该服务器中,会把该cookie中的sessionId读取出来,并放到请求头中发送到服务器。

  4. 服务器就可以根据客户端传过的sessionid在服务器中进行查找,来判断该请求是否是新的还是原来访问过的。

  • 注意: session必须依赖于cookie.

//创建一个session对象
    HttpSession session =  request.getSession("布尔值");
    //如果过来的请求是原来访问过的,则使用原来的session对象
    //(默认)true :如果是一个新的请求, 则创建新的session对象
    //false:如果是一个新的请求, 则不创建新的session对象

//获得创建的session的id
    String sessionId = session.getId();
    //获得的id的值就是Cookie的键的名字

//往session保存值:通过键(字符串)绑定值(任意数据类型)
    session.setAttribute("键","值");

//取出session中的值
    类型 value = (类型) session.getAttribute("键");
    //通过getAttribute方法取出来的值是object类型,我们还需要强制转型

//删除session中的值
    session.removeAttribute("键");

//返回第一次创建会话的时间
    session.getCreationTime();

//返回容器最后一次得到该会话ID的请求时间
    session.getLastAccessedTime();

//对于会话指定客户请求的最大间隔时间
    session.setMaxInactiveInterval(int interval);
    //以秒为单位。-1表示永不过期

//返回客户请求的最大间隔时间
    session.getMaxInactiveInterval(int interval);

//会话结束,当前存在在会话中的所有会话属性也会解除绑定
    session.invalidate();

cookie 与 session的区别

 cookiesession
地点 客户端 服务器端
存放的数据 能存文本 存任意数据类型

session的有效期设置

  1. 调用HttpSession接口中的setMaxInactiveInterval(int interval): 参数以 秒为单位 setMaxInactiveInterval该方式设置session的激活时间(发呆时间)

  2. 调用HttpSession接口 invalidate()方式 ,session立即失效 (安全退出的时候)

  3. 在web 应用程序中对web.xml 进行配置 <session-config>2</session-config>。配置的是全局的session的有效期。session的默认有效期为 30 分钟 --- 服务器中 conf/web.xml 中

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <!--注意: 当操作了该服务器下的所属的资源, 该session它都会被重新激活.-->

session的持久化

  1. 存在数据库中

  2. 写文件

URL重写

Session对象的正常使用要依赖于Cookie。URL地址重写能够取得置于Cookie中的会话,并把会话ID附加到访问应用的各个URL最后

//url重写
    String new_url=  response.encodeURL("地址");
    //地址可以是静态的也可以是动态的

    PrintWriter out =  response.getWriter();
    out.print("<a  href=‘"+new_url+"‘>test</a>");
    //对sessionURL重写的应用,在a标签中

//重定向的url重写
    String url = response.encodeRedirectURL("地址");
    response.sendRedirect(url);

以上是关于Session的主要内容,如果未能解决你的问题,请参考以下文章

一个队asp.net session进行了再次封装的C#类的代码

redis存储session配制方法

少部分手机浏览器对于COOKIE支持不够导致服务端无法读取session的解决方案

sqlserver-处理死锁

暑假自学JAVA Web心得

hibernate在使用getCurrentSession时提示no session found for current thread