通过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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构