• 关于禁用cookie后无法使用session的解决方案


    一、Session简单介绍

    客户端浏览器访问服务器的时候,服务器把客户端信息以类似于散列表的形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。[1]

    当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存[2]

    一般情况下,服务器通过回写cookie的方式,将sessionid存放到浏览器中,从而每次访问都可找到session数据。如果用户禁用了浏览器cookie功能,那么session的功能也无法发挥作用,这个时候可以通过在url中或者提交的数据参数中附带sessionId的方法来恢复session功能。

    二、sessionid的获取方式

    可以通过js异步访问服务器获取sessionid,保存到js变量中。在之后如果需要访问后台,可通过js操作,将sessionid加入到url中或者加入到表单数据中。

     前台代码:

    <button type="button" onclick="getSessionId()">获取session</button>
    
    /** thymeleaf模板相对路径 **/
    
        /*<![CDATA[*/
        ctxPath = /*[[@{/}]]*/ '';
        /*]]>*/
    
        function getSessionId(){
            $.post(ctxPath + "/getSessionId", {}, function(data){
                let sessionId = data.sessionId;
                console.log(sessionId);
            });
        }

    后台代码:

        /**
         * 获取sessionId
         * @param session
         * @return
         */
        @RequestMapping("/getSessionId")
        @ResponseBody
        public Map<String, Object> getSessionId(HttpSession session){
            Map<String, Object> map = new HashMap<>();
            map.put("sessionId", session.getId());
            return map;
        }

    效果:

     三、获取sessionid后使用举例[3]

     Reference:

    [1] mayiwoaini, Session详解, https://www.jianshu.com/p/4452cd4c4783
    [2] 程序员小新人学习, Cookies和Session的区别和理解, https://developer.51cto.com/art/201809/583768.htm
    [3] cecelia, cookie被禁用,如何使用session, https://www.cnblogs.com/ceceliahappycoding/p/10544075.html

  • 相关阅读:
    用javascript进行拖拽3(转)
    用javascript进行拖拽4(转)
    设计模式:设计自己的MVC框架(转)
    用javascript进行拖拽1(转)
    .NET Framework
    微软软件开发技术二十年回顾
    .NET Framework是什么
    .net中语音识别和语音合成入门篇
    用javascript进行拖拽5(转)
    .net3.0
  • 原文地址:https://www.cnblogs.com/ryelqy/p/13650540.html
Copyright © 2020-2023  润新知