C# mvc4.0 Cookies 和 session 丢失

问题描述

本人程序有以下步骤:1,自定义一个baseControllerpublicclassBaseController:Controller{publicLoginUserCustomUser=newLoginUser();publicBaseController(){CustomUser.Load();}}作用为使用CustomUser.Load();从cookies中反序列化回登录系统的个人信息;2,publicstringLogin(LoginFormusert){TospurUser.Model.Useruser=TospurUser.BLL.User.UserLogin(usert.UserName,usert.PassWord);if(user!=null){List<UserRoleProject>list=CommonProvider.GetCurrentProject(user.ID.ToString());LoginUserCustomUser=newLoginUser();CustomUser.UserId=user.ID.ToString();CustomUser.UserRoleId="1";CustomUser.PositionID=user.PositionID;CustomUser.DutyID=user.DutyID.ToString();CustomUser.FrameID=user.FrameID.ToString();CustomUser.UserName=user.Name;CustomUser.PresentFrame=user.FrameName;CustomUser.DisplayName=user.Name;CustomUser.Save();Session["DisplayName"]=CustomUser.DisplayName;Session["UserName"]=CustomUser.UserName;Session["UserId"]=CustomUser.UserId;Response.Redirect("/home/index");}else{Response.Redirect("/home/Login");}return"";}3,CustomUser类继承一个序列化对象到cookies的工具类[Serializable]publicclassCookieInfo{#region====================ConstructedMethod====================///<summary>///构造函数///</summary>publicCookieInfo(){}#endregion#region====================PublicMethod====================///<summary>///得到当前Cookies的过期时间///</summary>///<returns>过期时间</returns>publicDateTimeGetExpiresTime(){stringcookieName=GetType().ToString();if(HttpContext.Current.Request.Cookies[cookieName]!=null){returnHttpContext.Current.Request.Cookies[cookieName].Expires;}returnDateTime.MinValue;}///<summary>///保存Cookies,过期时间为浏览器关闭则失效。///</summary>///<paramname="expiresTime">Cookies过期事件</param>///<returns>是否保存成功</returns>publicboolSave(){returnthis.Save(DateTime.MinValue);}///<summary>///保存Cookies,需要指定过期时间。///</summary>///<paramname="expiresTime">Cookies过期事件</param>///<returns>是否保存成功</returns>publicboolSave(DateTimeexpiresTime){stringCookieName=GetType().ToString();HttpCookieSessionCookie=null;//对SessionId进行备份.if(HttpContext.Current.Request.Cookies["ASP.NET_SessionId"]!=null){stringSesssionId=HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value.ToString();SessionCookie=newHttpCookie("ASP.NET_SessionId");SessionCookie.Value=SesssionId;}SessionCookie=newHttpCookie("ASP.NET_SessionId");//设定cookie过期时间.DateTimedtExpiry=expiresTime;HttpContext.Current.Response.Cookies[CookieName].Expires=dtExpiry;//设定cookie域名.stringdomain=string.Empty;if(HttpContext.Current.Request.Params["HTTP_HOST"]!=null){//domain="www.elong.com";domain=HttpContext.Current.Request.Params["HTTP_HOST"].ToString();}//如果是www.elong.com或多级域名,需要转化为elong.comif(domain.IndexOf(".")>-1){string[]temp=domain.Split('.');if(temp.Length>=3){domain=temp[temp.Length-2].Trim()+"."+temp[temp.Length-1].Trim();}HttpContext.Current.Response.Cookies[CookieName].Domain=domain;}//把类的属性,写入Cookie.PropertyInfo[]Propertys=GetType().GetProperties();foreach(PropertyInfopiinPropertys){objectoj=pi.GetValue(this,null);Typetype=pi.PropertyType;stringvalueStr=string.Empty;if(oj!=null&&oj.ToString()!=string.Empty){if(type==Type.GetType("System.DateTime")){valueStr=((DateTime)oj).ToString("yyyy/MM/ddHH:mm:ss",System.Globalization.DateTimeFormatInfo.InvariantInfo);}else{valueStr=oj.ToString();}HttpContext.Current.Response.Cookies[CookieName][pi.Name]=HttpUtility.UrlEncode(valueStr);}}//如果cookie总数超过20个,重写ASP.NET_SessionId,以防Session丢失.if(HttpContext.Current.Request.Cookies.Count>20&&SessionCookie!=null){if(SessionCookie.Value!=string.Empty){HttpContext.Current.Response.Cookies.Remove("ASP.NET_SessionId");HttpContext.Current.Response.Cookies.Add(SessionCookie);}}returntrue;}///<summary>///找回Cookie值///</summary>publicvoidLoad(){stringcookieValue=string.Empty;stringCookieName=GetType().ToString();//通过遍历属性,从cookie中找回值,回写到属性.PropertyInfo[]Propertys=GetType().GetProperties();foreach(PropertyInfopiinPropertys){try{cookieValue=HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[CookieName][pi.Name].ToString());}catch(Exceptione){cookieValue=string.Empty;}if(pi.CanWrite&&cookieValue!=null&&cookieValue!=string.Empty){try{objectobb=cookieValue;Typetype=pi.PropertyType;obb=Convert.ChangeType(obb,type);pi.SetValue(this,obb,null);}catch{}}}}#endregion

解决方案

时间: 2024-10-03 02:52:33

C# mvc4.0 Cookies 和 session 丢失的相关文章

uploadify的asp.NET图片上传并处理session丢失的解决方案

插件在asp教程.net网站中的一个应用实例,希望对大家有所帮助,写得有什么不妥的地方也希望大家能够指出和见谅(这是在下技术博客中的处女作).好了,以下就是该插件的主要使用方法. <title>uploadify -- 示例</title>   <script type="text/网页特效" src="uploader/jquery-1.4.1.min.js" kesrc="uploader/jquery-1.4.1.min

ASP.NET Session丢失原因和应对策略

正常操作情况下会有ASP.NET Session丢失的情况出现.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成60分钟,不会这么快就超时的. 现在我就把原因和解决办法写出来. ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: <sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:424

asp.net session丢失的解决方法

现在我就把原因和解决办法写出来. ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: < sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' time

ASP.NET中Session丢失原因与解决方案小结

win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,造成保存在该进程中的session丢失. 因为Session,Application等数据默认保存在运行该Web应用程序的工作者进程中,如果回收工作者进程,则会造成丢失. 解决办法: 修改配置,设置为不定时自动回收该工作者进程,比如设置为当超出占用现有物理内存60%后自动回收该进程.通过使用默认应用程序池,可以确保多个应用程序间互相隔离,保证由于一个应用程序的崩溃不会影响另

PHP中SESSION丢失(不能跨页面传递)解决办法

  一般来说,使SESSION丢失有以下几点: 1.客户端禁用了cookie 2.浏览器无法存取cookie 3.php.ini中的session.use_trans_sid=0或编译时 没有打开–enable-trans-sid选项 Session储存于服务器端(默认以文件方式存储),根据客户端提供的session id来得到用户的文件, 取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String (就是访问的URL的"?"后面的部

ASP.NET技巧:Session丢失原因与解决方案小结

asp.net|session|技巧|解决 win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,造成保存在该进程中的session丢失. 因为Session,Application等数据默认保存在运行该Web应用程序的工作者进程中,如果回收工作者进程,则会造成丢失. 解决办法: 修改配置,设置为不定时自动回收该工作者进程,比如设置为当超出占用现有物理内存60%后自动回收该进程.通过使用默认应用程序池,可以确保多个应用程序间互

asp.net网站防恶意刷新的Cookies与Session解决方法

 本文实例讲述了asp.net网站防恶意刷新的Cookies与Session解决方法,是WEB程序设计中非常实用的技巧.分享给大家供大家参考.具体实现方法如下: Session版实现方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 public double time; public const in

ASP.NET Session丢失问题原因及解决方案

正常操作情况下会有ASP.NET Session丢失的情况出现.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成60分钟,不会这么快就超时的. 现在我就把原因和解决办法写出来. ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: <sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:424

ASP.NET Session丢失问题原因及解决方案[转]

不得不老调重弹 正常操作情况下会有ASP.NET Session丢失的情况出现.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成60分钟,不会这么快就超时的. 现在我就把原因和解决办法写出来. ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: < sessionState mode='InProc' stateConnectionString='tcpip=127.