会话或 cookie 混淆 [英] Session or cookie confusion

查看:20
本文介绍了会话或 cookie 混淆的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一些网站上看到用户登录他们的帐户然后关闭浏览器.

关闭并重新打开浏览器后,他们的帐户仍处于登录状态.

但有些网站不能这样做.

我对它是会话还是 cookie 感到困惑?

如果我希望我的网站像这样登录,我是否必须设置 session.setMaxInactiveInterval()cookie.setMaxAge()?

解决方案

* 这个答案有严重缺陷,见评论.*

<小时>

您的问题是关于会话跟踪.

[PART 1]:会话对象

HTTP 请求是单独处理的,因此为了保持每个请求之间的信息(例如,有关用户的信息),必须在服务器端创建一个 会话对象.>

有些网站根本不需要会话.用户无法修改任何内容的网站不必管理会话(例如,在线简历).在这样的网站上,您不需要任何 cookie 或会话.

创建会话:

在 servlet 中,使用来自 HttpServletRequest 对象的方法 request.getSession(true) 创建一个新的 HttpSession 对象.请注意,如果您使用 request.getSession(false),如果尚未创建会话,将返回 null.查看此答案了解更多详情.

设置/获取属性:

会话的目的是在每个请求之间保留有关服务器端的信息.例如,保留用户名:

session.setAttribute("name","MAGLEFF");//投掷String name = (String) session.getAttribute("name");

销毁会话:

如果长时间处于非活动状态,会话将被自动销毁.看看这个答案了解更多详情.但是您可以手动强制销毁会话,例如在注销操作的情况下:

HttpSession session = request.getSession(true);session.invalidate();

[PART 2] : 所以...加入黑暗面,我们有 COOKIES 吗?

饼干来了.

JSESSIONID :

每次使用 request.getSession() 创建会话时,都会在用户的计算机上创建 JSESSIONID cookie.为什么?因为在服务器端创建的每个会话都有一个 ID.您无法访问其他用户的会话,除非您没有正确的 ID.这个 ID 保存在 JSESSIONID cookie 中,并允许用户找到他的信息.查看此答案了解更多详情

JSESSIONID 什么时候被删除?

JSESSIONID 没有过期日期:它是一个 会话 cookie.与所有会话 cookie 一样,它会在浏览器关闭时被删除.如果使用基本的 JSESSIONID 机制,那么在关闭浏览器并重新打开浏览器后,会话将无法访问,因为 JSESSIONID cookie 被删除了.

请注意,客户端无法访问会话,但仍在服务器端运行.设置 MaxInactiveInterval 允许服务器在会话不活动时间过长时自动使会话无效.

JSESSIONID的邪恶破坏

只是为了好玩,有一天我在一个项目中发现了这段代码.它用于通过使用 javascript 删除 JSESSIONID cookie 来使会话无效:





        
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆