您的位置:首页 > 编程语言 > Java开发

JavaWeb-会话

2015-09-20 23:46 239 查看

会话

基本

关于cookie,第一次访问由服务器放在响应头里面返回给客户端,以后再次访问页面时(不同页面),客户端都会携带该cookie,,因为客户端即浏览器,浏览器不关闭,不更换cookie,假如没有设置cookie过期时间。

cookie缺陷,不安全性,每个cookie最大4k,放的内容小。然后可以用js操作cookie。建议隐私性的东西不要保存在cookie上

session,也是服务器为客户端创建一个Session对象,把sessionId放入cookie返回给客户端(新建了个Session对象自动返回),客户端使用cookie保存该id,当再次访问服务器时,cookie发送了JSessionId给服务器,服务器进行 getSessionById类似的操作,取到Session对象,来进行会话的进行。

第二次访问验证是否是同一个Session时,可以先req.getSession.getAttribute(“第一次赋予的key名”);

Session常用方法

removeAttribute();

getCreationTime();获得第一次创建回话的时间

getLastAccessedTime():返回容器最后一次得到该会话ID的请求时间。

setMaxInactiveInterval(int interval);对于会话制定客户请求设置最大的间隔时间,-1为永不过期;以秒为单位

getMaxInactiveInterval(int interval);

invalidate();会话结束

getId();返回JSESSIONID

进阶

cookie,setPath,getPath,例如,day06/servlet/loginServlet发给客户端的cookie。

此时cookie的有效路径是servlet,意思在访问servlet包下的所有servlet时,客户端的cookie都是有效的。。

setMaxAge和getMaxAge是设置cookie的有效期限,免登陆实现思路???登陆后给一个cookie,设置的maxAge够长的话,关掉浏览器后还有cookie,因为cookie已经做成了一个缓冲文件放在电脑的某个位置,设置时长实际是实际多久来删除该文件

删除cookie时设置 cookie.setMaxAge为0即可,主要删除cookie时的path要和设置cookie时的path一致, cookie.setPath(“路径”)

session生命周期

第一次访问servlet中 request的getSession时候得到session, 30分钟没人用后,session才会清洗session,而session是服务器管理的。

<session-timeout> 10 </session-timeout> 10分钟后摧毁session

session.invalidate()摧毁session方法2.

request.getSession(false);//只获取session,不创建session
显示购物车的时候用这个代码,查看已经放入购物车的物品的servlet的时候。
也可以request.getSession(),只是性能不太好。


什么才叫使用了session???

session没有被存取,叫未使用session,不活动时间。

电子商务网站必备流程,Session中Cookie的持久(在第一次getSession处进行)

访问Session的时候,服务器会返回一个cookie,包含了SessionId,再次访问的时候回解析cookie,看对照哪个Session。
想保持SessionID的存在,不会30分钟后创建新的Session,那么设置该Session返回的Cookie 的MaxAges。
得到session的SessionId,回写给Cookie的
session.getId();
Cookie cookie = new Cookie("JSESSIONID",sessionid);
cookie.setPath("路径包");
cookie.setMaxAge(30*60);
response.addCookie(cookie);


用户禁用Cookie时候怎么解决。

URL重写

点击超链接的时候把Cookie带来。然后每个session后面创建sessionID号

前提条件要先创建session,才能用encodeURL将JsessionId取得出来并添加到想要访问的路径的后面 ;JSIND=XXXXXX

response.encodeURL(发送session的Servlet),

response.encodeURL(验证session的Servlet);

encodeURL相当于,在这个servlet链接后面补上一个SessionId附加在cookie里面。

注意,刷新后,sessionId发生变化,这是因为没有在URL中绑定JSID,服务器认为你没有获得session,所以每次都给予新的JSESSIONID

假如服务器发现 已经带有了Cookie,则不会重写超链接URL。

注意,此时不能做session的持久化,因为session 的持久化是依赖于cookie,而用户禁用了cookie,所以不能做持久化,以为放入购物车的商品,关闭了浏览器之后再来访问,不能取得之前放入购物车的商品。

注意,刷新之后。。sessionId也重置???如何解决??不能解决!

getContextPath()得到项目名(根目录)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: