从事WEB开发的朋友都很清楚,COOKIE和Session都是实现会话保持的技术方案。我们在实际项目开发过程中也经常会发现Session会话丢失的现象,最常见的例子就是:明明登录了后台,但在很短的时间内刷新页面,又要求重新登录,这就是会话丢失的一种表现。
像这种会话丢失现象的原因是啥呢?很大一部分是因为客户端的COOKIE失效导致的。
Session和COOKIE的关系
对于Session和COOKIE之间的区别相信大家都很清楚,但很多从事开发工作的朋友却不知道这两者之间的联系。我面试过不少WEB开发者,甚至还有四五年开发经验的朋友都不清楚。
简单来说就是,Session和COOKIE是搭配使用的,Session中的唯一标识符(SessionID)是存储在客户端浏览器中的COOKIE中的。如果客户端的COOKIE被禁用了,那Session工作也会异常的。因为SessionID无法保持下去,客户端的每次请求又被当成了新用户的请求。
禁用COOKIE后如何保障Session机制正常?
因为COOKIE是保存在客户端浏览器的,而且客户端浏览器是允许用户自行设置是否关闭COOKIE的。所以对于WEB开发人员而言,一定要做好兼容性处理,一般在项目开发中我们是这样来处理COOKIE和Session的。
1、WEB前端判断用户浏览器的COOKIE是否处于开启状态:
可以通过前端JS代码来尝试写入COOKIE,看是否正常,如果客户端浏览器的COOKIE是禁用状态,那需要将服务器端生成的SessionID以GET方式附加到每次请求中,比如这种形式:
***/index.php?id=123&sessid=xxxxxxxx
2、服务器端接收GET传参中的SessionID
如果用户GET请求中含有SessionID的传参(如上面例子中的 sessid参数),那我们在服务器端要获取到这个传参的值,然后以此值作为SessionID去寻找对应的Session即可。比如PHP语言可以通过session_id()函数来获取、设置SessionID。
3、客户端友好页面引导用户去开启COOKIE
若前期项目没有做好这方面的兼容性处理,而且改造起来代价很大,那我们可以在前端做个引导页,如果COOKIE是禁用状态,则弹出此引导页引导用户开启COOKIE。
以上就是我的观点,对于大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!