精华内容
下载资源
问答
  • 退出登录清除session
    2020-12-31 17:53:07

    localStorage、sessionStorage操作

    localStorage PC浏览器(永久保存)

    sessionStorage PC浏览器(关闭窗口就删除数据)

    操作
    保存数据 sessionStorage[key] = value
    保存数据 sessionStorage.setItem(key,value);
    获取数据 var value = sessionStorage[key];
    获取数据 var value = sessionStorage.getItem(key);
    删除数据 sessionStorage.removeItem(key);
    删除数据 sessionStorage.clear();
    数据个数 sessionStorage.length
    获取key var key = sessionStorage.key(i);
    数据个数 localStorage.length
    获取key var key = localStorage.key(i);

    同理 localStorage

    更多相关内容
  • 退出登录时如何清空session中的数据

    在退出登录时只是简单的跳到登录界面的 jsp 中,而没有把 session 中的数据清空,这样就会造成非常大的漏洞,你虽然退出了,但是你登录的数据还存在 session 中,所以就需要在你退出登录的时候把 session 中的数据清空,然后再跳到登录的 jsp 页面中。

    1、首先在你点击退出的时候跳转到 servlet 中对 session 进行操作

    exit.onclick = function () {
            var result = confirm("确定要退出吗");
            if(result){
                window.location.href = "http://localhost:8080/login/OutLogin";
            }
        }

     2、在退出登录的方法里面,运用 removeAttribute 对 session 进行清除,之后再跳转到登录页面

    /**
         * 顾客退出登录
         * @param req
         * @param res
         * @throws Exception
         */
        public void OutLogin(HttpServletRequest req, HttpServletResponse res) throws Exception{
            req.getSession().removeAttribute("customer");
            res.sendRedirect("/userLogin.jsp");
        }

    Session 使用细节

    (1)Session 钝化、活化:

    钝化:在服务器正常关闭后,Tomcat 会自动将 Session 数据写入硬盘的文件中

    活化:再次启动服务器之后,从文件加载数据到 Session 中

    (2)Session 销毁

    1、默认情况下,无操作,30分钟自动销毁

    2、调用 Session 对象的 invalidate() 方法

    以上就是小编结合笔记和实际问题对清除 session 的一些见解,希望可以帮助到大家,也希望大家批评指正,一起进步。

    展开全文
  • 在默认情况下,session对象在关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,在用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息。清除session信息主要有两种方式,一种是遍历的...

    在默认情况下,session对象在关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,在用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息。清除session信息主要有两种方式,一种是遍历的清除session中的所有属性,另一种是直接设置session失效,两种方式都要在退出的接口中实现,附代码:

    		   HttpSession session = request.getSession();
               /* 清除session的方案一 */
               Enumeration attributeNames = request.getSession().getAttributeNames();
               while (attributeNames.hasMoreElements()) {
                   session.removeAttribute(attributeNames.nextElement().toString());
               }
               /* 清除session的方案二 */
               session.invalidate();
    

    到这里好像结束了,因为session已经被正确的清除。但是设想一种场景,当用户点击退出的时候,这里记录请求为request1,调用退出接口并清除了相关的session,但是如果用户此刻复制了目标路径,新建了一个窗口,回车进入,此时其实是另一个请求request2了,就是说上一步清除的session信息其实是request1,而request2请求将能正常登入系统。那么应该怎么做呢?这里有两种方案,一是利用Redis,二是采用ThreadLocal

    Redis解决方案

    思路:在Redis为每个用户登录的用户名维护一条记录,一定要设置过期时间,一般一个小时。用户每次登录的时候,通过通过拦截器从缓存中查询用户名,如果没有命中,则认为用户未登录过或者登录信息已经失效,引导用户重新登录,用户正确登录之后通过setnx()方法将用户名插入缓存。用户每次点击退出时,清除本次请求的session信息,并同时将缓存中记录用户名的key同步的删除。

    Tips:
    setnx()也被经常用作分布式锁,具体可参看博客:
    【分布式锁】并发场景下的数据插入

    接下来附上利用Redis维护、删除用户登录信息的部分代码:

    	/* 缓存里记录用户名的key */
    	private static final String USERNAME = "username_";
        public ModelAndView login(HttpServletRequest request,
                                  @RequestParam(value = "username", required = true) String username,
                                  @RequestParam(value = "password", required = true) String password) {
            ……
            String key = USERNAME + username;
            /* 把用户信息设置进缓存并设置过期时间 */
            redisCacheService.setnx(key, username);
            redisCacheService.expire(key, 60 * 60);
            ……
        }
    
        public ModelAndView logout(HttpServletRequest request, @ApiParam("用户名") @RequestParam(value = "username", required = true) String username) {
            ……
            HttpSession session = request.getSession();
            session.invalidate();
            /* 清除本地缓存 */
            String key = USERNAME + username;
            redisCacheService.remove(key);
            ……
        }
        
    

    然后在登录拦截器中设置每次从request中获取到用户信息之后,再和Redis中的去比较,如果缓存中没有命中,则视本次请求中的用户登录信息已经过期,需要跳转到登录页面。

    import org.apache.commons.lang3.StringUtils;
    public class LoginInterceptor implements HandlerInterceptor {
    	/* 缓存里记录用户名的key */
        private static final String USERNAME = "username_";
    
    	 @Override
        public boolean preHandle(HttpServletRequest servletRequest, HttpServletResponse servletResponse, Object o) throws Exception {
            servletRequest.setCharacterEncoding("UTF-8");
            servletResponse.setContentType("application/json;charset=utf-8");
            ServletOutputStream outputStream = servletResponse.getOutputStream();
    
            HttpSession session = servletRequest.getSession();
            Object userNameObject = session.getAttribute("userName");
            String userName = userNameObject != null ? userNameObject.toString() : null;
            if (userName == null) {
                servletResponse.setStatus(HttpServletResponse.SC_OK);
                String res="登录失败,未获取到用户登录信息~";
                outputStream.write(JsonUtils.toJson(res).getBytes("UTF-8"));
                return false;
            }
            /* 和本地缓存中的比较 */
            String key = USERNAME + userName;
            String value = (String) redisCacheService.get(key, String.class, new CacheCallable() {
                @Override
                public Object getCacheValue() throws Exception {
                    return null;
                }
            });
            /* 若未命中缓存,说明用户登录信息已失效,引导用户重新登录 */
            if (StringUtils.isBlank(value)) {
                return false;
            }
            return true;
        }
    }
    

    ThreadLocal解决方案

    待补充。

    参考阅读
    如何解决每次向后台发起请求时判断用户是否处于登录状态?
    展开全文
  • Java 删除session实现退出登录

    千次阅读 2022-04-04 10:36:45
    JS代码: <script src="<%=path %>... //用户点击了 “退出登录”,java 清空 session $("#bu2").click(function () { res = confirm("你 确定要 退出 吗?"); //在页面上弹出对话框 if (res == t

    JS代码:

    <script src="<%=path %>/Ui/js/jquery-1.8.2.min.js"></script>
                //用户点击了 “退出登录”,java 清空 session
                $("#bu2").click(function () {
                    res = confirm("你 确定要 退出 吗?"); //在页面上弹出对话框
                    if (res == true) {
                        var targetUrl = 'http://localhost:9999<%=path %>/logout.do'
                        $.ajax({
                            async: false,
                            type: "POST",
                            url: targetUrl,
                            contentType: "application/x-www-form-urlencoded; charset=utf-8",
                            dataType: "text",
                            complete: function () {
                                window.location.href = "<%=path %>/Ui/index.jsp"
                                //window.location.reload();
                            }
                        })
                    }
                });
    

    html代码:

    <button id="bu2" type="button">退出登录</button>
    

    java代码:

        @RequestMapping(value = "/logout",method = RequestMethod.POST)
        public String logout(HttpSession session) {
            System.out.println("进入 logout.do 请求");
            session.removeAttribute("username");
            session.invalidate(); //设置session 失效
            return "redirect:Ui/index";
        }
    

    笔记:js属于客户端脚本,是不能直接操作session的,session属于服务器端对象

    展开全文
  • 退出页面自动清除session技巧

    热门讨论 2015-08-01 15:18:14
    退出页面自动清除session技巧
  • 网站中点击退出,如果仅仅是重定向到登录/出页面,此时在浏览器地址栏中输入登录后的某个页面地址如主页,你会发现不用登录就能访问。这种所谓的退出并不是安全的。 那么怎样做到安全退出呢? 那就是点击退出后清空...
  • @RequestMapping("/logout") public String logout(HttpSession session){ session.invalidate(); return "/signup"; }
  • SSM 中关于退出系统时,清除session

    千次阅读 2019-06-26 13:35:32
    在默认情况下,session对象在关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,在用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息。 清除session对象内容的主要方法如下: (1)、...
  • vue 退出登录 清除localStorage

    千次阅读 2021-08-10 20:18:01
    vue 退出登录 清除session 在vue登录的时候我们会保持状态 如下: methods: { login(){ this.axios.post('users/login/',this.form).then(res=>{ console.log(res.data) if(res.data.code == 200){ ...
  • 退出登录清空session

    千次阅读 2019-02-23 11:10:13
    退出登录清空session如何从前台到后台 前台页面 获取项目路径 &amp;amp;lt;% String path = request.getContextPath(); %&amp;amp;gt; 页面退出按钮 后台代码 @RequestMapping(&amp;quot;/...
  • https://blog.csdn.net/s740556472/article/details/71275328 @RequestMapping("/logout") public String logout(HttpSession session, SessionStatus sessionStatus){ session.invalidate(); sessionStat...
  • 退出页面自动清除java session方法

    千次阅读 2021-02-12 17:02:05
    在默认情况下,session对象在关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,在用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息。清除session对象内容的主要方法如下:(1)、...
  • Session[“name”] = user.name.ToString(); Session[“pwd”] = user.password.ToString(); Session[“time”] = user.LoginTime.ToString(); Session[“authority”] = user.limits.ToString(); 2、在管理系统的...
  • Django 退出登录session清除

    千次阅读 2019-06-01 16:03:09
    登出 #退出(登出) def logout(request): # 1. 将session中的用户名、昵称删除 request.session.flush() # 2. 重定向到 登录界面 return redirect('/seller/login/')
  • /// /// 退出登录/// public void LoginOut(){Session.Abandon();if (Request.Cookies["loginId"] != null && Request.Cookies["pwd"] != null && Request.Cookies["id"] != null){Response.Cookies...
  • django清除django session

    2021-08-27 01:55:23
    如果用户主动退出session会自动清除,如果没有退出就一直保留,记录数越来越大,要定时清理没用的session。 python manage.py clearsessions
  • 一、在退出时移除Session,首先在登录时要记录登录信息 Session["id"] = user.id.ToString(); Session["name"] = user.name.ToString(); Session["pwd"] = user.password.ToString(); Session["time"] =...
  • 场景:session存储在redis中,退出登录清除session清不彻底 原代码: foreach($_SESSION as $key=&gt;$val){ unset($_SESSION[$key]); } 改进版: $_SESSION = null; if(isset($_COOKIE[session_name()])){...
  • //退出标签位置 <div class="item"><a target="_blank" href='user_info.php'>个人主页</a></div> //点击退出跳转到logout.php界面 <div class="item"><a href='../logout....
  • 转 https://blog.csdn.net/yxl8359026/article/details/49884825 [php] view plain copy publicfunctionlogout(){ $_SESSION=array();//清除SESSION值. if(isset($_COOKIE[session_nam...
  • 1.对于jsp页面,需要在首页jsp页面添加如下: <% response.setHeader(“Pragma”,“no-cache”); response.setHeader(“Cache-...这样,退出登录在按返回时,就会正常的被拦截器拦截! 2.对于html页面,需要在登
  • 关于退出系统时,清除session的方法

    万次阅读 2018-01-22 16:27:41
    在默认情况下,session对象在关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,在用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息。  清除session对象内容的主要方法如下:  ...
  • 清除session退出功能)

    千次阅读 2020-07-31 17:17:55
    <?...charset=utf-8"); // 开启session session_start(); // 清空session数组 $_SESSION = array();...// 销毁session文件 session_destroy();...setcookie('PHPSESSID',...// 退出后去登录页面 echo "<script>location
  • 退出登录:正好和登录相反(清理session会话信息) logout()方法: Django用户认证系统提供了logout()方法 封装了清理session的操作,帮助我们快速实现登出一个用户 logout()位置: django....
  • spring session 退出登录 清理session

    千次阅读 2017-11-10 09:26:09
    * Allows creating an HttpSession from a Session instance. * * @author Rob Winch * @since 1.0 */ private final class HttpSessionWrapper extends ExpiringSessionHttpSession&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,921
精华内容 13,968
关键字:

退出登录清除session