日期:2014-05-18  浏览次数:20420 次

由于session随时会丢失,请教一下各位高手是怎么保存用户登陆信息的?
我用cookies保存用户名和密码,
登陆后用session保存用户名,但很session随时都会丢失的,那样又要登陆了,好麻烦!
请问一下有什么好的办法解决这个问题?

------解决方案--------------------
cookie+session
------解决方案--------------------
session怎么个容易丢失法?设置有效时间setTimeOut?
------解决方案--------------------
昏倒,你把setTimeOut=“时间”改了。就是时间改长点就好了啊
------解决方案--------------------
session很容易丢吗?
------解决方案--------------------
session很容易丢吗?
------解决方案--------------------
setTimeOut
------解决方案--------------------
Session随时会丢失?.
不过也没错,本来.net的session是不稳定,你把时间设一下
------解决方案--------------------
session和cookie结合
------解决方案--------------------
用隐藏的label来保存
------解决方案--------------------
探讨
session和cookie结合

------解决方案--------------------
session丢失除了设置过期时间之外,还有个重要因素是IIS的设置!因为如果服务器会监视所有的进程,发现谁变大了就会收缩它。
------解决方案--------------------
 SessionState 的Timeout,其主要原因有三种。

  一:有些杀病毒软件会去扫描您的Web.Config文件,那时Session肯定掉,这是微软的说法。

  二:程序内部里有让Session掉失的代码,及服务器内存不足产生的。

  三:程序有框架页面和跨域情况。

  第一种解决办法是:使杀病毒软件屏蔽扫描Web.Config文件(程序运行时自己也不要去编辑它)
  第二种是检查代码有无Session.Abandon()之类的。
  第三种是在Window服务中将ASP.NET State Service 启动。
------解决方案--------------------
用数据库来保存session就不会丢了,教lz一种方法,保准管用:
1.在web.config里设置mode=SQLServer,并用数据库来保存session;如:
<sessionState mode="SQLServer" 
cookieless="true" sqlConnectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"
timeout="20"/> 

2.在运行 SQL Server 的计算机(它将存储会话状态)上运行 InstallSqlState.sql(默认的安装位置为 <驱动器>:\systemroot\Microsoft.NET\Framework\version)。这将创建一个名为 ASPState 的数据库,该数据库具有新的存储过程并且在 TempDB 数据库中具有 ASPStateTempApplications 表和 ASPStateTempSessions 表。

参见:http://www.ninedns.com/asp.net/2007102514908.html
------解决方案--------------------
引用楼主 CodeShow 的帖子:
我用cookies保存用户名和密码,
登陆后用session保存用户名,但很session随时都会丢失的,那样又要登陆了,好麻烦!
请问一下有什么好的办法解决这个问题?

------解决方案--------------------
C# code


public static void GetUserInfo()
{
   HttpContext context = HttpContext.Current;
   
   //每个页面都检查session,如果session为null,则重新获取,适用于使用Form验证的方式
   if (context.Session["userinfo"] == null) 
   {
    UserInfo userinfo = new UserInfo();

    context.Session["userinfo"] = userinfo;

    if (context.Request.IsAuthenticated)
    {  
           userinfo = Func_GetUserInfo(context.User.Identity.Name);
         if (userinfo.user_id.Trim().Length>0)
       {
        context.Session["userinfo"] = userinfo;
       }
       else
       {
        //如果用户不存在了,则注销验证信息
        System.Web.Security.FormsAuthentication.SignOut();    
        }
    }
    }
}

------解决方案--------------------
对于“Session过期”的问题,我基本上是建议大家去考虑资源稍微差一些的“生产服务器”的状况,也就是说现在就去租一个网站空间然后部署一个比较好玩的asp.net应用去体验体验。如果就是用自己的单机,或者局域网里的自己的服务器做标准,很可能做出来的程序只能用在那种特定的服务器环境下,而可靠性不高。