网站登录 个人信息存储 方案

news/2024/5/17 11:28:21/文章来源:https://blog.csdn.net/weixin_30449453/article/details/98137345

前情纪要:

这是关于前一段时间工作中网站的登陆信息的小总结,以前也没有想到要写这个随笔,是因为一个同事的一句话给了我很大的感触,所以就决定要总结一下。

去年半年时间再做一个后台管理程序(ERP)网站的登陆、权限等方面我负责,实现了登陆、权限、缓存丢失但不超时自动重新登录、异地登陆登出等功能,还做了一个微信、一个官网的全部内容(这里主要谈登陆、个人信息的存储)。

但是自己没有意识到自己用的什么方式,在和同事聊模式的时候他说:erp中就是缓存+数据库的方式实现的。正所谓一举惊醒梦中人,听君一席话胜读十年书,和别人交流(说与听)真的能提升自己的认知。


 

一:简单网站的个人信息储存方案:

采用cookie+sesion的方式判断登陆状态+个人信息,登录时存储两者,并赋给相同过期时间,不排除session丢失的情况。

1:cookie中存储简单信息用于页面效果内容展示、判断登陆状态。

     js 获取到cookie内容个人的基本信息和是否登陆,决定是否可以进入某些页面、某些关键操作。

    cookie失效或者丢失则重新登录。

2:session用于后台判定登陆状态session["userflag"] 登陆者["userid"] 

实际的操作回去判断session的信息有效性,判断session失效后同时将cookie做过期处理,实现登陆状态控制,并处理了session丢失的问题。

总结:简答的前后台的两种标示判断登陆状态及信息。

代码:

前台:

function CookieHelper() {}
//删除cookie
CookieHelper.prototype.deleteCookie = function (name) {var date = new Date();date.setTime(date.getTime() - 10000);document.cookie = name + "=v; expires=" + date.toGMTString() + ";path=/";
}//设置cookie
CookieHelper.prototype.setCookie = function (name, value) {//设置之前先删除this.deleteCookie(name);//获取当前时间 var date = new Date();var expiresDays = 10;//将date设置为10天以后的时间 date.setTime(date.getTime() + expiresDays * 24 * 3600 * 1000);//cookie设置为10天后过期 document.cookie = name + "=" + value + "; expires=" + date.toGMTString() + ";path=/";document.cookie
}//获取某一cookie key=value
CookieHelper.prototype.getCookie = function (name) {var strCookie = document.cookie;var arrCookie = strCookie.split("; ");for (var i = 0; i < arrCookie.length; i++) {var arr = arrCookie[i].split("=");if (arr[0] == name) {return arr[1];}}return "";
}
//获取cookie 类型 key=id=123&name=qwe&pwd=uio
CookieHelper.prototype.getCookies = function (name) {var strCookie = document.cookie;var arrCookie = strCookie.split("; ");for (var i = 0; i < arrCookie.length; i++) {var arr = arrCookie[i].split("=");if (arr[0] == name) {return arrCookie[i].substring(arrCookie[i].indexOf("=") + 1)}}return "";
}
//获取所有cookie

CookieHelper.prototype.getAllCookie = function (name) {var strCookie = document.cookie;var arrCookie = strCookie.split("; ");if (arrcookie.length > 0) {return arrCookie;} else {return "";}
}
CookieHelper

 cookie判定登陆状态、登陆、登出

//登出
function OWLogOut() {$.ajax({url: "/OW/OWebSite/LogOut",success: function (res) {window.location.href = "/OW/OWebSite/Index";}})
}
//登陆
function Loginow() {var phone = $("#loginphone").val();var pwd = $("#loginpwd").val();if (phone == "") {alert("请输入手机号!");return false;} else if (phone != "") {var r = phone.match(/^0?1[34758]\d{9}$/);if (r == null) {alert("请输入正确的手机号!");return false;}else if (pwd == "") {alert("请输入密码!");return false;}}$.ajax({url: "/OW/OWebSite/Login",type: "post",data: { loginphone: $("#loginphone").val(), loginpwd: $("#loginpwd").val() },success: function (res) {if (res == "成功登陆!") {loginclose();} else {alert(res);$("#loginpwd").val("");}}})
}
//判断是否登陆
function initlogin() {var cookie = new CookieHelper();var userprofile = cookie.getCookies("UserProfile");if (userprofile != "") {var usersplit = userprofile.split("&");for (var i = 0; i < usersplit.length; i++) {if (usersplit[i].indexOf("UserName") > -1) {var realname = usersplit[i].split("=")[1];realname = window.decodeURI(realname);//登陆后的逻辑处理
            }}}
}
$(document).ready(function () {initlogin();
})
login、logout、页面展示

 

 后台:

 /// <summary>/// 登陆写Cookie/// </summary>/// <param name="account"></param>/// <param name="user"></param>public void SaveUserCookie(User user){DeleteUserCookie();FormsAuthentication.SetAuthCookie(user.Account, false);HttpCookie ct = new HttpCookie("UserProfile");Encoding utf8 = Encoding.UTF8;//首先用utf-8进行解码                    ct["Account"] = HttpUtility.UrlEncode(user.Account, utf8);ct["UserName"] = HttpUtility.UrlEncode(user.Name, utf8);ct["UserScore"] = HttpUtility.UrlEncode(user.Score.ToString(), utf8);ct.Expires = DateTime.Now.AddMinutes(60);Session.Timeout = 60;this.HttpContext.Session.Add("OWUserFlag", true);this.HttpContext.Session.Add("OWUserID", HttpUtility.UrlEncode(user.ID.ToString(), utf8));Response.Cookies.Add(ct);}public void DeleteUserCookie(){Cookie.Remove("UserProfile");this.HttpContext.Session.Remove("OWUserFlag");this.HttpContext.Session.Remove("OWUserID");}
后台session+cookie存储和作废
 [HttpPost]public string Login(string loginphone, string loginpwd){//判断用户存在User user = this.WebSiteService.CheckLogin(new UserLoginRequest() { Name = loginphone, PassWord = loginpwd });if (user.ID > 0){this.SaveUserCookie(user);return "成功登陆!";}else{if (user.ID == -1){return "用户不存在请注册!";}else if (user.ID == -2){return "同一个手机号存在多账户,请联系客服!";}else if (user.ID == -3){return "您的账户不存在,很可疑!";}else{return "密码不正确!";}}}
登陆
 /// <summary>/// 登出/// </summary>/// <returns></returns>public void LogOut(){DeleteUserCookie();}
登出
        public ActionResult Text(){int userID = this.GetUserID;if (userID == 0){return RefreshForWebSite("/OW/OWebSite/Index", "请重新登录");}//逻辑
}    
方法中判定登陆状态

 


 

二:网站复杂登陆信息控制解决方案

 

 

  这种方式时也是采用了一个框架,通过cookie、cache、数据库实现登录信息、权限的控制。

登陆后会产生一个token (guid) 存在cookie(7天),数据库一个表存登陆者基本信息(ID,Name,登陆时间,权限简码),cache中存储全部内容(登陆者信息、权限信息),并在c#的管道中实现权限控制(Attribute方式),cache 采用token作为key,有logininfo全局对象。

具体代码以后有空整理好了再写上来。

 


 

三:微信公共号登陆及判定

微信公共号其实没有什么登陆,但我们是通过微信公共号平台来做一个微信端的微官网,作为一个销售渠道,所以产生实际的交易时需要登陆。

微信用户与我放公共号有一个媒介--openid,在用户登陆是获取到openid并与登陆账号绑定。在客户端通过cookie存储userid与openid ,在后台中获取cookie判断是否是登陆及登陆者信息。因为是微信端,没有考虑太多的安全性问题,但是在后台中会有一些安全性的判定。

openid与userid进行绑定,储存在User表中,因为用的是cookie,支付流程如下:

 

 

具体实现可以看我的另一个随笔:微信(一) 获取openid 网页授权 C# WeChatHelper。

 


 

总结:这就是目前的几种我总结的实现方式,也比较简陋,如果有什么问题,欢迎留言,不喜欢请Ctrl+W,谢谢,勿喷。

 

转载于:https://www.cnblogs.com/zhaokunbokeyuan256/p/6677844.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_773338.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python版——博客网站八 编写IOS版本的移动App

2019独角兽企业重金招聘Python工程师标准>>> 开源地址&#xff1a;https://github.com/leebingbin/Python3.WebAPP.Blog 本文为博主原创文章&#xff0c;转载请注明出处&#xff01; https://my.oschina.net/u/3375733/blog/ 转载于:https://my.oschina.net/u/33757…

第四百零四节,python网站第三方登录,social-auth-app-django模块,

第四百零四节&#xff0c;python网站第三方登录&#xff0c;social-auth-app-django模块&#xff0c; social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目前流行的第三方登录都采用了OAuth2协议 安装 pip install -i https://pypi.douban.com/simple so…

MVC与单元测试实践之健身网站(五)-系统信息、前台入口

Fit项目停滞了一段时间&#xff0c;现在继续吧。上一篇完成了动作文本和配图的添加、编辑等内容。接下来要完成的是后台的最后一个模块&#xff1a;系统信息&#xff1b;以及前台的入口&#xff1a;关于注册、登录、修改密码等。 一 系统信息 a) 用户信息 用户信息界面可以查看…

在线学编程!十大优秀IT在线教育网站推荐

在这个信息技术高速发展的时代&#xff0c;我们似乎已离不开网络。而且随着互联网技术的发展&#xff0c;许多传统的领域已经发生了很大的变化&#xff0c;比如教育。除了自己啃书本或是在教室里听老师讲课&#xff0c;我们现在可以借助互联网接受在线(视频)教育。这使得我们可…

网站故障排除一例

今天上午9点的时候收到报警邮件&#xff0c;提示网站502bad gateway, 输入网站url后果然无法打开&#xff1a; 登录服务器查看nginx进程正常&#xff1a; 查看fastcGI进程已经停止运行了&#xff1a; 问题找到后就该查找是什么原因产生的问题&#xff0c;先把fastcGI进程启动后…

CSS改网站背景色

background:颜色值; 把这个写在你要改变的DIV块 对应的css里面就可以了 本文转自 yeybz 51CTO博客&#xff0c;原文链接:http://blog.51cto.com/hmlwl/1398877

简单高效防注入攻击的动态多参数、动态SQL语句拼接方法,提高网站的安全性...

并非人人是高手&#xff0c;并非人人是神仙&#xff0c;我也有不懂的地方&#xff0c;我也有不注意的技术问题&#xff0c;多交流多学习就是最好的提高方法 其实对与初学者来说&#xff0c;进行的动态的查询语句拼接也不是那么好做的事情&#xff0c;就是做出来了&#xff0c;也…

好的学习网站及博客

2019独角兽企业重金招聘Python工程师标准>>> 慕课网&#xff1a;http://www.imooc.com/course/list ActiveMq:http://boy00fly.iteye.com/blog/1103586 转载于:https://my.oschina.net/luyaolove/blog/598490

zabbix 监控web网站性能

一直在纠结用什么实例来给大家演示呢&#xff1f;想来想去还是官方的好&#xff0c;那我们怎么用zabbix监控web性能和可用性呢&#xff1f;我们这边分为几个步骤&#xff1a;打开网站、登陆、登陆验证、退出&#xff0c;一共4个小step&#xff0c;看实例。 检测流程 1. 打开网站…

paper 28 :一些常见常用数据库的下载网站集锦

做图像处理模式识别的童鞋怎么可以没有数据库呢&#xff1f; 但是&#xff0c;如果自己做一个数据库&#xff0c;费时费力费钱先不说&#xff0c;关键是建立的数据库的公信力一般不会高&#xff0c;做出的算法也别人也不好比较&#xff0c;所以呢&#xff0c;下载比较权威的公共…

学英语好网站

转载于:https://www.cnblogs.com/DeeLMind/p/7627276.html

初学Node.js之Markdown建站

平时做项目中的Web应用都是用Asp.Net或者Java&#xff0c;但有时候需要快速做一些小Web的时候&#xff0c;感觉用Asp.Net或者Java都有点重。一开始想学学PHP&#xff0c;但实在不喜欢PHP的语法&#xff0c;所只用PHP写了两个简单的Demo之后就写不下去了。了解到最近Node.js有点…

自己搭建CA颁发证书做https加密网站

如果网站是针对内网的访问的&#xff0c;自己搭建CA服务器颁发证书就可以&#xff0c;如果是针对互联网来访问的&#xff0c;还是买ssl证书比较好&#xff0c;今天就来介绍一下自己搭建CA服务器颁发证书做加密网站。 192.168.10.187 CA服务器 192.168.10.190 web服务器 &#x…

完整利用Rsync实现服务器/网站数据增量同步备份

我们在选择VPS、服务器架设项目之后&#xff0c;所有的项目、网站数据都需要我们自行备份和维护&#xff0c;即便有些服务商有提供管理型服务器&#xff0c;但是数据自行备份和管理才是较为靠谱的。无论是网站&#xff0c;还是其他项目&#xff0c;数据的备份方式有很多种&…

MVC与单元测试实践之健身网站(一)-项目概述

2019独角兽企业重金招聘Python工程师标准>>> 前不久刚刚通过租房网站的开发学习了MVC&#xff0c;并随后学习了单元测试相关的基础&#xff0c;现在开始健身网站的开发&#xff0c;该项目将结合MVC与单元测试&#xff0c;在开发实践过程中&#xff0c;趁热打铁&…

Java爬虫_资源网站爬取实战

对 http://bestcbooks.com/ 这个网站的书籍进行爬取 (爬取资源分享在结尾) 下面是通过一个URL获得其对应网页源码的方法 传入一个 url 返回其源码 (获得源码后&#xff0c;对源码进行解析&#xff0c;获得页面中其他的书籍地址和当前页面的书籍的百度网盘的链接,因为这个网站…

Nginx配置SSL证书部署HTTPS网站

一、什么是 SSL 证书&#xff0c;什么是 HTTPSSSL 证书是一种数字证书&#xff0c;它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道&#xff0c;从而实现&#xff1a;1、数据信息在客户端和服务器之间的加密传输&#xff0c;保证双方传递信息的安全…

【好书试读】速度与激情:以网站性能提升用户体验

开始试读&#xff1a;https://yqfile.alicdn.com/1d4578a32e3f5120cd35a1e53e2000b5.pdf天猫购买链接&#xff1a;速度与激情&#xff1a;以网站性能提升用户体验 Web设计师在权衡外观设计与网站性能时总是要作出艰难的选择。良好的内容、布局、图片和交互对于吸引用户来说至关…

网站用户身份识别俩大招之django实现cookie

导航&#xff1a; 原理介绍 代码实现 过程分析 追踪Cookie 原理介绍 众所周知&#xff0c;http协议是无状态的协议&#xff0c;简单理解是用户的前一步操作和后一步操作之间没有关系&#xff0c;互相不知道&#xff0c;不干扰。而在很多场景下&#xff0c;浏览网页时&#xff0…

Java网站开发必看书籍

转发&#xff1a;https://blog.csdn.net/tianya846/article/details/50683248 1&#xff1a;《java并发编程从入门到精通》 推荐理由&#xff1a; 从入门讲到精通的&#xff0c;网络安全&#xff0c;网络并发的好书。《Java并发编程从入门到精通》作者结合自己10多年Java并发编…