为什么每刷新一次就建一个新的session?

测试页代码如下:

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
<html>
<body>
<center>
<%=session.getId()%>
</center>
</body>
</html>

我一开始以为是因为没有数据写入session的原因,后来我按书上写了个简单的登陆界面,把登陆名定入session中,跳到另一个页面也读不到写入session的数据。发现sessionId是新的,cookie是null值。在网上寻找了很久也没找到可以解决的方法。

本人用的是IE8,把IE里的"替代cookie自动处理勾上,也勾上“总是允许会话 cookie”还是不行,请问有人知道是什么原因吗?
我试了保存数据入session的,最后得到的是NULL值,代码如下:
第一个网页,提交信息,就是通过<input...提交,没什么特别的,代码不贴了。
第二个网页,接收第一个网页填的登陆名,并写入session中:
第二个网页的代码:
<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.util.*"%>
<html>
<head><title>登陆验证</title></head>
<body>
<%String name=request.getParameter("user");
byte b[]=name.getBytes("ISO-8859-1");
name=new String(b);
session.setAttribute("name",name);
%>你的名字<%=(String)session.getAttribute("name")%>已经写入session了.(这里能正常读出name)
<a href="checksession.jsp">验证登陆</a>
</body>
</html>
第三个网页(checksession.jsp),就是用<%=(String)session.getAttribute("name")%>取出登陆名,结果却为null,问题就出现在这里,在第二个页面存进session的name取不出来了,不知与TOMCAT有没关?
使用session前加一句:session.setMaxInactiveInterval(30*60);也是返回null值。
非常感谢大家解答,我把tomcat7.0删了,装了个6.0的没问题了my god!

就这个一个简单的JSP而言,sessionId肯定是会变的,因为你没有在控制中将session延续下去。
尝试着写个ACTION,然后跳转到原页面,sessionId就不会变了。 注意,刷新和跳转一个概念,但是,跳转里有数据,直接刷新带的请求里没有session相关的,对于tomcat而言,没有session的请求就无法弄到相应的进程里去,只能新建一个。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-08-24
网络或浏览器的问题。
在浏览器通过http协议提交时,会在消息头里面包含一个唯一性ID号,服务器端根据ID号,会自动识别并查询是否有对应的关联号,有则自动关联到对应的session,如果没有则创建新session。
第2个回答  2010-10-13
看看你 checksession.jsp这个页面时如何跳转过去的,是不是新开的一个页面还是通过连接或者提交跳转过去的。如果是新开的也没当然不属于同一个session了
第3个回答  2010-10-08
你的登录流程没看出有什么问题,会不会是Tomcat的失效时间问题?尝试在第2个页面中使用session前加一句:session.setMaxInactiveInterval(30*60);试试吧
第4个回答  2010-10-07
刷新相当于一次请求吧

为什么每刷新一次就建一个新的session?
就这个一个简单的JSP而言,sessionId肯定是会变的,因为你没有在控制中将session延续下去。尝试着写个ACTION,然后跳转到原页面,sessionId就不会变了。 注意,刷新和跳转一个概念,但是,跳转里有数据,直接刷新带的请求里没有session相关的,对于tomcat而言,没有session的请求就无法弄到相应的进程里去,...

...SESSION只开启,每刷新一次就产生一个新的session
一个浏览器应用会产生一个session 简单说也就是进程管理器里每多出一个浏览器的进程, 就会产生一个新的session

为什么我调试的时候没有设置session一开始就执行了 session_start这个函...
超时,或者手动过期.如果不赋值,刷新页面后,上一个session就会过期了.

sessionId的生成机制是什么?
跟IP和端口这些无关吧,应该跟客户端,浏览器这些有关。当浏览器第一次请求时,服务器创建一个session对象,同时生成一个sessionId,并在此次响应中将sessionId 以响应报文的方式些回客户端浏览器内存或以重写url方式送回客户端,来保持整个会话。关闭此浏览器窗口,其内存中的sessionId也就随之销毁。重...

为什么会产生两个session
jsp刷新有新的session是因为浏览器的cookie发生了变化,导致无法跟之前创建的session保持一致性导致的。jsp中对应的cookie操作:HttpCookie cookie = new HttpCookie("userName");cookie.Value = userName;cookie.Expires = DateTime.Now.AddHours(2);Response.Cookies.Add(cookie);第一行:创建一个Http...

一个关于Session的问题:Session里面的对象被清除了,但用户还能进行相关...
两个问题...第一,客户端页面保存着临时数据 第二,当客户刷新时,虽然服务器上已经销毁了session.这时又马上新创建一个session,像这种情况,你最好设置访问规则,以及权限的问题..

session的生命周期是什么
称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。

...SESSION时效的问题。关闭浏览器 服务器的 session没有消失,还存在...
session会在服务器存在一定时间,php5默认是1440秒。就是说你把网页关闭了这个session还存在服务器里1440秒。为什么关了浏览器session会生成新的呢,牵扯到一个浏览器的数据传输问题。新开一个全新的浏览器(IE6下是点击ie图标新开一个窗口),浏览器没有带sessionD这个值(php里名字叫PHPSESSID),服务...

电脑每次开机或者重起就会生成一个新的用户
打开注册表编辑器,依次选择“HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager”子键,然后在右侧窗口中找到“BootExecute”键值项并将其数值清空,最后按“F5”键刷新注册表即可HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\ControlSession Manager的多字符串段BootExecute这一行就是一个...

...isnewsession是判断什么? session是基于什么创建的?刷新是...
闲置了好长时间,比如30分钟,然后刷新页面或点击了某个链接,此时,前一个Session过期了,会新建一个Session,那么session.isnewsession属性就是True。不过Session没有过期,刷新页面,还是使用的这个Session,这个属性就是False。Session大多是基于Cookie的,客户端保存一个SessionID,实际内容保存在服务端。

相似回答