保存Session ID 的几种方式

1 保存session ID 的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器
2 由于cookie可以被人为的禁止,必须有其他机制在cookie被禁止时依然能够把session ID传递回服务器,经常用的一种技术叫URL重写,就是把session ID附加在url路径后面,附加有2种方式
a,作为url路径的附加信息 http://…../xxx;jsessionid=ByOK3vjFD75aPnrF7C2H
b,作为查询字符串附加在url后面 http://……?……&jsessionid=ByOK3vjFD75aPnrF7C2H
要想要网络在整个交互过程中始终保持状态,必须在客户端所有可能发送请求的路径后面都添加上这个session ID
3 还有一种叫做表单隐藏字段,在服务器端会自动修改表单,添加一个隐藏字段(隐藏字段的value如果不放在表单里再好好搞一下可以把抓取页面的人恶心死)以便用户在提交表单时,把session ID传回服务器

session ID什么时候创建呢?
错误的以为是:有客户端访问时就创建,我感觉没必要 有些用户只是上来看看有必要给他创建session么!?浪费资源,当服务器某个server(如servlet)调用HttpServletRequest.getSession(true)这样的语句时才会创建session(一般是要有一些业务需求了)

URL重写的弊端:
对所有URL都要重写啊,包括超链接,form,action,重定向的url,每个站点引用你的url,返回给用户的url(即使通过间接手段,比如response.headers中的Location字段)都要添加额外的字段,艹,麻烦死 !
这样搞你的站点不能包含任何的静态页面(至少不能有链接到动态页面的链接),每个页面必须由servlet或jsp
(这里不知怎么说好,jsp编译了也是servlet啊)动态生成,即使所有都动态生成了,如果用户离开会话(例如我出去上了个厕所,session超时了)从收藏夹或书签或链接中找回来,这是会话信息已经没了,因为存储下来的链接有错误的标识信息-Session ID已经过期啦!

表单隐藏字段的弊端:
你的站点每个页面必须是由表单提交而生成的吧!你单击一个超文本链接肯定是不会有表单生成的,不能提供会话跟踪啊

在JavaScript中保存session id以便后续使用通常有几种方法: 1. Cookies:可以将session id存储在HTTP cookie中。使用JavaScript的`document.cookie`可以访问和修改cookie。例如,可以创建一个cookie来存储session id: ```javascript document.cookie = "session_id=your_session_id; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/"; ``` 这行代码会在用户的浏览器中设置一个名为`session_id`的cookie,值为`your_session_id`,并设置过期时间为指定的日期和时间。 2. localStorage:是Web Storage API的一部分,提供了一种在客户端存储数据的方式,而且不会过期。使用localStorage保存session id的代码如下: ```javascript localStorage.setItem('session_id', 'your_session_id'); ``` 之后可以使用`localStorage.getItem('session_id')`来获取存储的session id。 3. sessionStorage:与localStorage类似,也是Web Storage API的一部分,但是它的数据只在当前浏览器窗口或标签页打开期间有效,关闭窗口或标签页后数据会被清除。 ```javascript sessionStorage.setItem('session_id', 'your_session_id'); ``` 可以使用`sessionStorage.getItem('session_id')`来获取存储的session id。 4. URL参数:也可以通过URL的查询字符串参数来传递session id。例如,通过重定向或者链接传递: ``` http://example.com/page?session_id=your_session_id ``` 这些方法各有适用场景,比如如果需要持久存储session id,可以选择使用cookies或者localStorage;如果session id只在当前会话有效,可以使用sessionStorage。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值