sl是哪个sl男明星缩写 揭秘sl的身份和经历?

来源:JoeSnailcnblogs.com/JoeSnail/p/8250231.html在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]就可以限制非登录用户访问该页面。那么如果实现登录?Form登录应用程序确认用户状态HTTP协议是无状态的。所以上一次请求和下一次请求并不能相互关联起来,就是说这些请求并不能确定是哪个用户和用户的状态。但是对于登录来说,我们就需要准确的知道用户的状态及是哪个用户。通常有两种情况来记录用户状态。一种在服务端通过Session来标识。一种通过Cookie在客户端标识用户。(用户每次请求应用程序时都会携带该Cookie。)Form登录实现Forms 身份验证将身份验证标记保留在 Cookie 或页的 URL 中。Forms 身份验证通过 FormsAuthenticationModule 类参与到 ASP.NET 页面的生命周期中。可以通过 FormsAuthentication 类访问 Forms 身份验证信息和功能。步骤一在Web.Config配置文件中指定验证的方式为Form,并设置跳转的登录地址和Cookie的名称,及超时时间等。设置该配置文件,并不需要特意给Action传递returnUrl,就可以获取到跳转地址。Form特性的详细说明(https://msdn.microsoft.com/zh-cn/library/1d3t3c61(v=vs.110).aspx)此时当未登录的用户访问有[Authorize]特性的Action操作时,会被跳转到Login页面,同时Login页面的URL后面会添加一个加密的ReturnUrl地址,该地址指向之前访问的有[Authorize]特性的Action地址。步骤二之前提到Form认证其实就是生成了一个Cookie,存放到用户的浏览器中。通过FormAuthenication.SetAuthCookie(userName,true);设置验证登录的Cookie。再通过页面跳转将Cookie响应给客户端。[HttpPost][ValidateAntiForgeryToken]public ActionResult Login(LoginViewModel vm,string returnUrl){if (ModelState.IsValid){//用户名,密码验证FormsAuthentication.SetAuthCookie(vm.UserName, true); //设置Form验证Cookie,后一个 参数为是否创建持久Cookie。及true为可以在用户浏览器上保存的。false为不在浏览器上保存。if (Url.IsLocalUrl(returnUrl)){return Redirect(returnUrl);}return RedirectToAction("Detail");}elsereturn View(vm);}此时当我们登录以后会在浏览器中生成一个跟配置文件中名称相同的Cookie如:该Cookie就是我们已经登录,通过Form验证的凭证。此时我们就可以访问那些需要登录才能访问的页面。注销删除对应的Cookie即可实现注销,代码如下:[Authorize]public ActionResult LogOut(){FormsAuthentication.SignOut();//通过Forms验证来删除Cookiereturn View();}角色添加有些页面可能只允许特定用户才能访问,在MVC中可以通过[Authorize(Roles="VIP")]设置Action或Controller,表示只有角色为VIP的用户才可以访问该页面。如:只有登录且用户角色为VIP的才可以访问这个页面。[Authorize(Roles = "VIP")]public ActionResult VIP(){return View();}同时需要在设置Form验证凭据时把用户角色添加到Cookie。如:[HttpPost][ValidateAntiForgeryToken]public ActionResult Login(LoginViewModel vm, string returnUrl){if (ModelState.IsValid){//用户名,密码验证//FormsAuthentication.SetAuthCookie(vm.UserName, true); //设置Form验证Cookie,后一个 参数为是否创建持久Cookie。及true为可以在用户浏览器上保存的。false为不在浏览器上保存。//if (Url.IsLocalUrl(returnUrl))//{//
return Redirect(returnUrl);//}//return RedirectToAction("Detail");vm.Role = "VIP";var authTicket = new FormsAuthenticationTicket(1,
// 版本vm.UserName,
// 用户名称DateTime.Now,
// 创建日期DateTime.Now.AddMinutes(20),
// 过期时间vm.Remember,
// 是否记住vm.Role
// 用户角色);string encryptedTicket = FormsAuthentication.Encrypt(authTicket);var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);authCookie.HttpOnly = true;//客户端脚本不能访问authCookie.Secure = FormsAuthentication.RequireSSL;//是否仅用https传递cookieauthCookie.Domain = FormsAuthentication.CookieDomain;//与cookie关联的域authCookie.Path = FormsAuthentication.FormsCookiePath;//cookie关联的虚拟路径Response.Cookies.Add(authCookie);if (Url.IsLocalUrl(returnUrl)){return Redirect(returnUrl);}return RedirectToAction("Detail");}elsereturn View(vm);}在Global.asax.cs文件中重写Application_AuthenticateRequest事件protected void Application_AuthenticateRequest(Object sender, EventArgs e){//获取CookieHttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];if (authCookie == null
authCookie.Value == "")return;FormsAuthenticationTicket authTicket;try{//解析CookieauthTicket = FormsAuthentication.Decrypt(authCookie.Value);}catch{return;}// 解析权限string[] roles = authTicket.UserData.Split(';');if (Context.User != null)//把权限赋值给当前用户Context.User = new GenericPrincipal(Context.User.Identity, roles);}至此最简单的Form身份验证实现了。但是该Cookie只包含了用户名,没有其他信息。如果要包含其他信息,可以通过扩展用户的身份标识(HttpContext.User实例)来实现。HttpContext.User定义如下通过User属性可以访问Iprincipal接口的属性和方法。//获取或设置当前 HTTP 请求的安全信息。public IPrincipal User{get;[SecurityPermissionAttribute(SecurityAction.Demand, ControlPrincipal = true)]set;}所以扩展用户身份标识可以通过实现IPrincipal接口。如:public class MyFormsPrincipal : IPrincipal where TUserData : class, new(){private IIdentity _identity;private TUserData _userData;public MyFormsPrincipal(FormsAuthenticationTicket ticket, TUserData userData){if( ticket == null )throw new ArgumentNullException("ticket");if( userData == null )throw new ArgumentNullException("userData");_identity = new FormsIdentity(ticket);//Forms身份验证_userData = userData;}public TUserData UserData{get { return _userData; }}public IIdentity Identity{get { return _identity; }}public bool IsInRole(string role){return false;}}这个方法的核心是:在登录时,创建自定义的FormsAuthenticationTicket对象,它包含了用户信息。加密FormsAuthenticationTicket对象。创建登录Cookie,它将包含FormsAuthenticationTicket对象加密后的结果。在管线的早期阶段,读取登录Cookie,如果有,则解密。从解密后的FormsAuthenticationTicket对象中还原我们保存的用户信息。设置HttpContext.User为我们自定义的对象。源码(https://pan.baidu.com/s/1hrLvm9Q),如有不对,请多多指教。看完本文有收获?请转发分享给更多人关注「DotNet」,提升.Net技能淘口令:复制以下红色内容,再打开手淘即可购买范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)}
1. 船舶MMSl是船舶识别号吗船舶9位是mmsi的俗称,具有船舶身份证的信息功能。是一种水上移动通信业务标识码。它是船舶无线电通信系统在其无线电信道上发佈的、能独特识别各类台站和成组呼叫台站一列九位数字码,9位码用于唯一标识船舶,能快速找到船舶行径。。2. 船舶登记号与船舶识别号在船舶尾部的镙璇奖上面的船壳上,还有在船舶的大桅上里边还装着灯,晚上开灯后很明亮看到还有船头前面两旁的船壳上。3. 船舶的mmsi是什么你说错了,应该是MMSI,英文是Maritime Mobile Service Identity,为海上通信业务标识码,说白了就是电台的电话号码。4. lmo船舶识别号IMO船舶一般指国际航行船舶。IMO是国际海事组织的缩写。每一艘国际航行船舶都会有一个唯一的IMO编号,类似于身份证,一船一码。通过你的IMO编号就能查到你船的相关信息。而只在国内航行的船舶则不需要这一编号,但是也会有唯一的船检登记码。5. 船舶识别号查询海事局在船舶识别号系统中公布了第二批现有船舶识别号 查询方法如下:1、登陆中国海事局网站;2、点击网上申报(网页右侧中部);3、在下拉菜单中选择船舶公司查询 6. 船舶mmsi编号怎么查看1,登陆船讯网或者其他船位查询网站2,输入正确的船名3,弹出的船舶信息栏中就会显示船舶呼号、识别码(MMSI)、IMO编号7. 船舶mmsl是什么这个不是的,这个是船舶的移动岸站识别号,就像是你的手机号一样,是唯一的。船舶编号指IMO编号,也是唯一的。 8. 什么是船舶识别号船舶动态和目的港可以通过下载“船讯网”或者是微信小程序里面的“船达通”来查询。船讯网和船达通都能查询到船舶的动态,里面有船舶的类型、长度、宽度、吃水、船舶识别号、来自港、目的港、船舶的国籍,离港时间、航行还是锚泊,预计到港时间等信息,十分方便快捷9. 船舶识别号是不是mmsi水上移动通信业务标识码(Maritime Mobile Service Identify,以下简称“MMSI”)是船舶无线电通信系统在其无线电信道上发送的,能独特识别各类台站和成组呼叫台站的一列九位数字码。中文名水上移动通信业务标识码外文名Maritime Mobile Service Identify简称MMSI定义无线电通信系统发送的九位数字码当船舶在海上遇险时,中国海上搜救中心通过接收到的MMSI码,可以迅速查找船舶资料及其所属公司信息,以便组织搜救。因此,船舶配备MMSI码并确保其与船舶实际情况随时保持一致对于提高船舶海上遇险搜救效率、保障船舶航行安全具有重大意义。10. 船舶呼号和mmsi黄色和绿色代表船舶用途不同,绿色是货船,蓝色代表客船,红色代表执法船,粉色代表引航船,黄色代表其他船型,比如渔船等黄色 - 实时,半小时内有更新; 绿色 - 半小时到2小时之内有更新; 灰色 - 超过2个小时没有更新。在通常的情况下,这些船舶是不显示的,只有在搜索时,才会出现。}

我要回帖

更多关于 今天开始做明星 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信