jsp为什么我的首页一刷新就会有新的session产生?

2024-11-22 15:53:16
推荐回答(2个)
回答(1):

jsp刷新有新的session是因为浏览器的cookie发生了变化,导致无法跟之前创建的session保持一致性导致的。
jsp中对应的cookie操作:

HttpCookie cookie = new HttpCookie("userName");
cookie.Value = userName;
cookie.Expires = DateTime.Now.AddHours(2);
Response.Cookies.Add(cookie);

第一行:创建一个HttpCookie对象,然后构造函数 给个cookie名称
第二行:给这个cookie赋值---->因为cookie是以键值对存储的 ex:userName = “admin”
第三行:设置此cookie的失效时间,此值是一个具体的失效时间datetime类型 上面是设置两个小时后失效
第四行:将cookie写到cookie中。
注意:
1. 因为Cookice是存储在客户端的数据,如果有敏感的数据必须在服务端加密后然后在保存
2. Cookice在客户端有两种保存形式:(1)保存在硬盘上(设置了cookice的失效时间的情况下) (2)保存在内存中(在没有设置cookice的失效时间的情况下)
3. 如果服务端的cookice和客户端已有的cookice重名则会覆盖原有的cookice
4. 如果要想清除某个cookice的话可是设置它的失效时间小于当前的日期即可cookie.Expires = DateTime.Now.AddDays(-1);

回答(2):

这个问题比较复杂。。
首先你的代码可能会有问题
你可以编写一个测试页面index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>




<%=session.getId()%>


然后使用浏览器访问,刷新看页面显示sessionid会不会改变。如果你的浏览器没问题,只要该窗口不关闭,session的生命周期不结束,该sessionId应该就是一个值。如果你这个测试页面正常,那就说明你写的页面中有获得session的相关代码,而那个代码执行后产生了新的session。
其次,session功能需要浏览器的cookie支持,如果cookie功能关闭了,每次刷新就会产生新ID了。
再次,不同的浏览器对session的理解是不同的,火狐对同一个浏览器的不同窗口采取的是同一个session的机制,而IE浏览器的机制是一个窗口就是一个session。

如问题解决,请采纳本答案