zoukankan      html  css  js  c++  java
  • 通过Cookie存放用户登录信息以及安全性问题

    场景

    一个系统中需要用户登录,当用户登录之后,用一个全局变量存放用户信息,当用户执行一些Action的时候,需要先验证用户信息是否存在,如果存在则往下执行方法,如果不存在则跳转到登录界面。当用户点击退出系统或者关闭浏览器的时候,用户信息将被清除。

    采用Cookies存放用户信息

    当用户进入登录界面,首先检测用户名密码是否正确,然后将信息存放到Cookies中

    Response.Cookies["username"].Value = username;

    退出系统时,则将Cookies的时间设置为负数,则Cookies则会被清除

    Response.Cookies["username"].Expires = DateTime.Now.AddDays(-1);

    这里要注意一下,我之前对Cookies设置了存活时间(这也是接触Cookies时候给自己留下的一个固话概念,Cookies就需要设置时长),我关闭了浏览器之后,我仍可以直接输入相关的Action的url,跳过登录步骤,也就是说Cookies还未清除。
    原因是如果一个Cookies没有设置时间,则该Cookies是加载到内存中,当关闭浏览器时,Cookies也将清除;如果设置了时间,则会将Cookies存储到一个文件中,只要时间没到,即使关闭了浏览器,Cookies信息仍然存在。
    这样做了之后,点击退出系统,以及点击关闭浏览器都能成功将Coolies信息清除,如果直接输入系统内部的url是无法进入,并跳转到登录界面。
    但是存在一个问题,如果用户关闭页面,浏览器仍然未关闭,Cookies信息还是没有清除,这时候还是可以直接输入url并成功进入。
    因此,我想到用javascript来监听关闭页面,在javascript中清除Cookies信息的方法。

    第一步:绑定窗口关闭方法:

    $(window).bind('beforeunload', function () {
        DelCookie("username");
    });

    第二步:
    通过document.cookie方法获取所有cookies,根据key来得到需要删除的cookie,将该cookie设置截止时间为负数即可

    function GetCookieValue(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    function DelCookie(name) {
        var exp = new Date();
        exp.setTime(exp.getTime() + (-1 * 24 * 60 * 60 * 1000));
        var cval = GetCookieValue(name);
        document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
    }

    这样就能够成功满足:
    1 点击退出系统
    2 关闭浏览器
    3 关闭页面
    就能够清除用户登录信息,直接输入系统内部url无法进入系统的需求。

    转自:https://blog.csdn.net/u014229215/article/details/78069472

  • 相关阅读:
    LeetCode 842. Split Array into Fibonacci Sequence
    LeetCode 1087. Brace Expansion
    LeetCode 1219. Path with Maximum Gold
    LeetCode 1079. Letter Tile Possibilities
    LeetCode 1049. Last Stone Weight II
    LeetCode 1046. Last Stone Weight
    LeetCode 1139. Largest 1-Bordered Square
    LeetCode 764. Largest Plus Sign
    LeetCode 1105. Filling Bookcase Shelves
    LeetCode 1027. Longest Arithmetic Sequence
  • 原文地址:https://www.cnblogs.com/sky6699/p/15294060.html
Copyright © 2011-2022 走看看