关于form验证的处理片断

        public virtual void SignIn(s_User user, bool createPersistentCookie)
        {
            var now = DateTime.UtcNow.ToLocalTime();

            //01 实例化一个form表单身份验证票证
            //FormsAuthenticationTicket(int version, string name, DateTime issueDate, DateTime expiration, bool isPersistent, string userData, string cookiePath);
            var ticket = new FormsAuthenticationTicket(
                1 /*version*/,                //票证的版本号
                user.Nickname,                //用户名
                now,                          //发生时间
                now.Add(_expirationTimeSpan), //过期时间,通常用FormsAuthentication.Timeout作默认值
                createPersistentCookie,       //true存储在cookie,false存储在url,这个用户选择,“记住我”
                user.Email,                   //用户数据,这里只保存了email
                FormsAuthentication.FormsCookiePath); //Cookie存放路径,通常用FormsAuthentication.FormsCookiePath作默认值

            //02 将票证加密成适合cookie保存的字符串
            string encryptedTicket = FormsAuthentication.Encrypt(ticket);

            //03 将加密后的字符串写入cookie
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
            cookie.HttpOnly = true; //不允许客户端脚本访问cookie,仅限http访问
            if (ticket.IsPersistent)//如果票证需要持久化,指定cookie过期时间
            {
                cookie.Expires = ticket.Expiration;
            }
            //使用https传输此cookie
            cookie.Secure = FormsAuthentication.RequireSSL;
            cookie.Path = FormsAuthentication.FormsCookiePath;
            if (FormsAuthentication.CookieDomain != null)
            {
                cookie.Domain = FormsAuthentication.CookieDomain;
            }

            _httpContext.Response.Cookies.Add(cookie);
            _cachedUser = user;

            //如果想用默认的方式处理,不写上面那么多:FormsAuthentication.SetAuthCookie(loginName, true);
       }

        //验证当前通过验证的用户
        public virtual s_User GetAuthenticatedUser()
        {
            //如果有缓存的用户,就返回缓存的用户  //如果是基于http会话级的生命周期注入方式,则是可以这样写的
            if (_cachedUser != null) return _cachedUser;

            if (_httpContext == null ||                     //如果httpContext为空
                _httpContext.Request == null ||             // 或httpContext.Request为空 Request.IsAuthenticated为假就返回 空
                !_httpContext.Request.IsAuthenticated ||    // 或或httpContext.Request.IsAuthenticated = false
                !(_httpContext.User.Identity is FormsIdentity)) //_httpContext.User.Identity的票证不是 FormsIdentity
            {
                return null;                                // 都返回null, 即用户验证失败
            }

            //获取会话中的表单身份验证票证[这个user封装了读cookie,解密cookie,验证转换的过程]
            var formsIdentity = (FormsIdentity)_httpContext.User.Identity;

            //从formsIdentity.Ticket.UserData取email
            var userEmail = formsIdentity.Ticket.UserData;

            //如果email验证失败,则验证失败
            if (String.IsNullOrWhiteSpace(userEmail)) return null;

            //用email去查询数据库,获取user
            var user = _userService.GetUserByEmail(userEmail);

            //如果是合法用户,返回当前合法用户
            if (user != null && user.Active ) _cachedUser = user;
            return user;
        }

        public virtual void SignOut()
        {
            _cachedUser = null;
            FormsAuthentication.SignOut();
        }
时间: 2024-10-01 04:02:48

关于form验证的处理片断的相关文章

[Asp.Net] Form验证中 user.identity为false

这个方法可以是user.identity设置为true FormsAuthentication.SetAuthCookie(Username, true); 但是要开启form验证, 在配置文件中 <authentication mode="Forms"></authentication> 还有有的项目中默认移除了from验证的module, You need to remove this line <system.webServer> <mo

angularJS添加form验证:自定义验证

刚学习form验证.不得不说form验证是比较丰富的.下面来个小例子.1.情景:看电影选座位!2.具体要求:当输入座位号时,进行校验.其中1已经被选.如果输入为1,则提交按钮置为无效,并且给出提示,如果输入为2,则不给出提示,允许提交3.实际效果: 4.代码示例: 1 <!DOCTYPE HTML> 2 <html ng-app="app"> 3 <head> 4 <meta charset="utf-8"/> 5 &

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能.开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/ReadingClub 一.form验证 MVC的form验证有三个地方可以做,第一道关就是前端提交之前,第二道关就是在数据保存之前,也就是在controller中做验证,第三道关就是数据保存的时候,也就是如果提交的数据模型不符合实体定义的约束,数据是无法保存的,这是最后一道防线.第一道关主要是依赖于

FORM验证简单demo

详解稍后加入. 项目结构如图: web.xml <?xml version="1.0" encoding="UTF-8" ?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocat

form验证及图片上传

form验证及图片上传 这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能.开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/ReadingClub 一.form验证 MVC的form验证有三个地方可以做,第一道关就是前端提交之前,第二道关就是在数据保存之前,也就是在controller中做验证,第三道关就是数据保存的时候,也就是如果提交的数据模型不符合实体定义的约束,数据是无法保存的,这是最后一道防

ASP.NET4中不要相信Request.Browser.Cookies,Form验证要用UseCookies

从ASP.NET 3.5升级至ASP.NET4之后,遇到三种登录后不能保存cookie的情况(升级前一切正常): 1. 遨游3在极速模式下(默认模式). 2. FireFox中修改了UserAgent. 3. 诺基亚手机自带浏览器或者UCWeb浏览器访问博客园手机版(m.cnblogs.com). 今天终于把罪魁祸首给揪出来了,它就是Request.Browser.Cookies. 如果你在程序中使用Form验证并使用cookie保存用户的登录状态,请切记:在<authentication mo

Django中Form验证

Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一,Form验证 第一种操作:主要是这三个函数 is_valid() cleaned_data errors from xiaoqing import models def form(request): if request.method == "GET": return render(request,'form.html') eli

西游之路——python全栈——通用模块(pager、check_code、form验证)

1.验证码 1 import random 2 from PIL import Image, ImageDraw, ImageFont, ImageFilter 3 4 _letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z 5 _upper_cases = _letter_cases.upper() # 大写字母 6 _numbers = ''.join(map(str, range(3, 10))) # 数字 7

django 使用form验证用户名和密码

form验证可以减少查询数据库,所以代码先预先验证,有问题可以返回给前端显示 1.在users文件夹下新建forms.py文件,用来验证用户名和密码是否为空,密码长度是否大于6 # -*- coding: utf-8 -*- # 作者:神秘藏宝室 # 日期:2018/12/30 21:56 from django import forms class LoginForm(forms.Form): username = forms.CharField(required=True) password