Session
Posted -archenemy-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session相关的知识,希望对你有一定的参考价值。
session 运行原理
-
接受到客户端的请求后,服务器端就会创建一个 session对象。session对象保存了所有用户的信息.当创建一个session对象时 会产生一个sessionId的一个编号与该session对象关联。
-
服务器通过cookie的方式把产生的sessionId 发送到客户端(浏览器)
-
当客户端再次请求该服务器中,会把该cookie中的sessionId读取出来,并放到请求头中发送到服务器。
-
服务器就可以根据客户端传过的sessionid在服务器中进行查找,来判断该请求是否是新的还是原来访问过的。
//创建一个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的区别
cookie | session | |
---|---|---|
地点 | 客户端 | 服务器端 |
存放的数据 | 能存文本 | 存任意数据类型 |
session的有效期设置
-
调用HttpSession接口中的setMaxInactiveInterval(int interval): 参数以 秒为单位 setMaxInactiveInterval该方式设置session的激活时间(发呆时间)
-
调用HttpSession接口 invalidate()方式 ,session立即失效 (安全退出的时候)
-
在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的持久化
-
存在数据库中
-
写文件
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#类的代码
少部分手机浏览器对于COOKIE支持不够导致服务端无法读取session的解决方案
hibernate在使用getCurrentSession时提示no session found for current thread