通过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