怎么解决随着浏览器关闭cookie中的sessionid失效问题

2021-03-31 08:52发布

14条回答
小磊子
2楼 · 2021-03-31 09:34

原因:

因为默认情况下,当getSession()后,session就被被创建。session在创建时,服务器会通过Cookie返回session 的ID给浏览器,之后服务器根据浏览器Cookie里的session的ID来分辨不同用户。但是,这种方法返回的cookie是保存在浏览器的内存中,浏览器关闭后内存会被清理,所以在session在关闭浏览器后就失效了。虽然在服务器保存的session会在在有效期后才会被销毁,但是用户的cookie里没有session的ID,服务器就不能判断出当前用户是否是原先的那个用户。


解决方法:

 


我们可以创建一个新的CooKie,该Cookie的名字为jsession,path为WEB应用的虚拟路径,并设置setMaxAge()的毫秒值,让Cookie保存在客户端的硬盘中,这时即使多次对浏览器进行关开操作是不会清除客户端硬盘文件的。所以,Cookie就不丢失了,SessionId也不会随浏览器关闭而丢失。


  具体代码实现:


  


Cookie cookie = new Cookie("JSESSIONID",session.getId());

          cookie.setPath(request.getContextPath()+"/");

          cookie.setMaxAge(30*60);

          response.addCookie(cookie);


可以手动为cookie中添加JSESSIONID信息,此时不管浏览器是否关闭,cookie中都会携带JSESSION信息,这样的话,只要session没有消亡, 服务器就一定能够找到对应的session,而不会重新建立一个新的session。

杨晓春
4楼 · 2021-04-01 08:51

果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程、死机等),服务器无法处理用户退出网站的请求,解决方式如下: 
方式1:在每个页面中加入隐藏的IFrame,以异步刷新的方式定期刷新iframe页面,如每隔10S刷新一次,当服务器在一定的时间内未收到用户的刷新请求,则认为用户已经退出 
优点:能在短时间内判断出用户是否已经退出缺点:增加用户请求次数,所消耗的服务器资源较大 
方式2:使用cookie保存用户登录信息,不要设置cookie的过期时间,当关闭浏览器时,cookie会自动过期 
优点:处理方便缺点:用户浏览器不一定支持cookie,也就无法实现该方式 
方式3:在页面中添加onunload事件,当关闭浏览器时,自动跳转到“退出”页面(loginout.action) 
优点:退出时,能及时进行处理缺点:当用户打开多个页面时,关闭任何一个页面都有可能导致用户的退出 
方式4:记录用户的每次操作时间(包括页面刷新、提交表单等),在数据库中用作业每隔一段时间检查上次的操作时间,当操作时间大于一定的数值时,就认为该用户已经退出 
优点:无论哪种非正常退出,都能够进行处理缺点:进行检查的时间间隔不容易确定,如果用户在线,当长时间未操作,也会认为用户已经退出 
方式5:等待session失效 
优点:你可以不用做任何工作缺点:用户可以在你等待的这段时间内重新登录。

王先森
5楼 · 2021-04-01 11:22

因为默认情况下,当getSession()后,session就被被创建。session在创建时,服务器会通过Cookie返回session 的ID给浏览器,之后服务器根据浏览器Cookie里的session的ID来分辨不同用户。但是,这种方法返回的cookie是保存在浏览器的内存中,浏览器关闭后内存会被清理,所以在session在关闭浏览器后就失效了。虽然在服务器保存的session会在在有效期后才会被销毁,但是用户的cookie里没有session的ID,服务器就不能判断出当前用户是否是原先的那个用户。


Vita
6楼 · 2021-04-01 20:09

设置一个同名cookie,将sessionid保存起来,然后设置cookie有效期,有效期内session不会改变id。

例如:

Cookie cookie = new Cookie("JSESSIONID",session.getId());

          cookie.setPath(request.getContextPath()+"/");

          cookie.setMaxAge(36000);

          response.addCookie(cookie);


一个Ai
7楼 · 2021-04-02 10:55

如果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程、死机等),服务器无法处理用户退出网站的请求,解决方式如下:
方式1:在每个页面中加入隐藏的IFrame,以异步刷新的方式定期刷新iframe页面,如每隔10S刷新一次,当服务器在一定的时间内未收到用户的刷新请求,则认为用户已经退出
优点:能在短时间内判断出用户是否已经退出缺点:增加用户请求次数,所消耗的服务器资源较大
方式2:使用cookie保存用户登录信息,不要设置cookie的过期时间,当关闭浏览器时,cookie会自动过期
优点:处理方便缺点:用户浏览器不一定支持cookie,也就无法实现该方式
方式3:在页面中添加onunload事件,当关闭浏览器时,自动跳转到“退出”页面(loginout.action)
优点:退出时,能及时进行处理缺点:当用户打开多个页面时,关闭任何一个页面都有可能导致用户的退出
方式4:记录用户的每次操作时间(包括页面刷新、提交表单等),在数据库中用作业每隔一段时间检查上次的操作时间,当操作时间大于一定的数值时,就认为该用户已经退出
优点:无论哪种非正常退出,都能够进行处理缺点:进行检查的时间间隔不容易确定,如果用户在线,当长时间未操作,也会认为用户已经退出
方式5:等待session失效
优点:你可以不用做任何工作缺点:用户可以在你等待的这段时间内重新登录。

小小收藏家
8楼 · 2021-04-02 16:23

原因:因为默认情况下,当getSession()后,session就被被创建。session在创建时,服务器会通过Cookie返回session 的ID给浏览器,之后服务器根据浏览器Cookie里的session的ID来分辨不同用户。但是,这种方法返回的cookie是保存在浏览器的内存中,浏览器关闭后内存会被清理,所以在session在关闭浏览器后就失效了。虽然在服务器保存的session会在在有效期后才会被销毁,但是用户的cookie里没有session的ID,服务器就不能判断出当前用户是否是原先的那个用户。

解决方法:我们可以创建一个新的CooKie,该Cookie的名字为jsession,path为WEB应用的虚拟路径,并设置setMaxAge()的毫秒值,让Cookie保存在客户端的硬盘中,这时即使多次对浏览器进行关开操作是不会清除客户端硬盘文件的。所以,Cookie就不丢失了,SessionId也不会随浏览器关闭而丢失。


爱学习的小巴
9楼 · 2021-04-02 16:23

方式1:在每个页面中加入隐藏的IFrame,以异步刷新的方式定期刷新iframe页面,如每隔10S刷新一次,当服务器在一定的时间内未收到用户的刷新请求,则认为用户已经退出 
方式2:使用cookie保存用户登录信息,不要设置cookie的过期时间,当关闭浏览器时,cookie会自动过期 
方式3:在页面中添加onunload事件,当关闭浏览器时,自动跳转到“退出”页面(loginout.action)  
方式4:记录用户的每次操作时间(包括页面刷新、提交表单等),在数据库中用作业每隔一段时间检查上次的操作时间,当操作时间大于一定的数值时,就认为该用户已经退出 
方式5:等待session失效 

相关问题推荐

  • 回答 7

    首先创建表:CREATE TABLE `sys_sequence` (   `NAME` varchar(50) NOT NULL,   `CURRENT_VALUE` int(11) NOT NULL DEFAULT '0',   `INCREMENT` int(11) NOT NULL DEFAULT '1',   PRIMARY KEY (`NAME`) )插...

  • 回答 15

    1、什么是线程池:  java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。       ...

  • 回答 4

    我知道快速排序是

  • 回答 14

    优化一下分页,每次不一定要取出所有记录,再说搜索结果太过也没什么意义,通过主键来排序,即便不用全文索引也应该是很快的.

  • 常见的算法有哪些?2020-06-23 10:35
    回答 1
    已采纳

    (一)基本算法 : 1.枚举 2.搜索: 深度优先搜索 广度优先搜索 启发式搜索 遗传算法 (二)数据结构的算法 (三)数论与代数算法 (四)计算几何的算法:求凸包 (五)图论 算法: 1.哈夫曼编码 2.树的遍历 3.最短路径 算法 4.最小生成树 算法 5.最小树形图 6....

  • 回答 10

    基础:比如计算机系统、算法、编译原理等等Web开发: 主要是Web开发相关的内容,包括HTML/CSS/js(前端页面)、 Servlet/JSP(J2EE)以及MySQL(数据库)相关的知识。它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面)。J2EE:你需...

  • 回答 2

    void solve(){int a,b,c,d,e,f;int y,z;    for(a=1;a

  • 回答 6

    算法是Java大数据算法  肯定有用的

  • 回答 6

    冒泡排序(BubbleSort)是一种最简单的排序算法。它的基本思想是迭代地对输入序列的第一个元素到最后一个元素进行俩俩比较,当满足条件时交换这俩个元素的位置,该过程持续到不需要执行上述过程的条件时。选择排序(SelectSort)是一种原地(in-place)排序算法,适...

  • 回答 4

    算法工程师一般都是学的数据挖掘和机器学习,而且对专业要求比较高,对能力也有一定的限制。算法工程师通过算式来完成不同的逻辑运算,他们的工作范围有对图像音频视频等信息进行处理,如图像和视频的分类、检测、识别、跟踪、计算成像等,通过大数据分析进行...

没有解决我的问题,去提问