由于经常听说session信息丢失的情况,所以想知道如何设置将session信息保存在sql server里,这样是不是就可以防止session没有到过期时间就丢失的情况,请高人指点,谢谢!

解决方案 »

  1.   

    存到数据库并不说明SESSION不会丢失啊,SESSION本来就是记录用户有关信息的一种手段,如登陆名,密码什么的。根据用户不同,记录不同的信息,实际上一般SESSION中存的信息数据库中也要有的,所以没必要这么做。
      

  2.   

    public string StrName;
    session["VariableName"]=StrName;
    把StrName当作参数插入
      

  3.   

    一般session都保存一些和当前用户相关的信息,你都保存数据库了,那多个session如何区分?不要保存数据库,可以适当将session保存时间延长。
    当然,技术上完全没问题,只要你喜欢:)
      

  4.   

    insert into tablename values(session["name"].tostring())
      

  5.   

    <sessionState> 元素
    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpgenref/html/gngrfsessionstatesection.asp
      

  6.   

    我说的不是这个意思,我是想知道,session信息可不可以通过web.cofig设置将session信息保存在sql server里,以避免session信息设置过期时限为20分钟可是不到20分钟就丢失的情况,不知道是不是有这样的功能.
      

  7.   

    "session信息可不可以通过web.cofig设置将session信息保存在sql server里,以避免session信息设置过期时限为20分钟可是不到20分钟就丢失的情况,不知道是不是有这样的功能."
    没听说过有这样的功能!!!
    你可以将要保存的信息存到sql server数据库中,不久可以达到同样的效果了!
      

  8.   

    是可以手工存到sql server里,可是这样比较麻烦呀,我如果是在session里存一个自定义类的话就更麻烦了,如果有办法能让session不会在过期前丢失就没有这些个问题了.
      

  9.   

    有没人用过<sessionState>设置为用sql server保存的呀,给介绍一下谢谢
      

  10.   

    使用 SQLServer 模式 在运行 SQL Server 的计算机(它将存储会话状态)上运行 InstallSqlState.sql(默认的安装位置为 <驱动器>:\systemroot\Microsoft.NET\Framework\version)。这将创建一个名为 ASPState 的数据库,该数据库具有新的存储过程并且在 TempDB 数据库中具有 ASPStateTempApplications 表和 ASPStateTempSessions 表。 
    在应用程序的 Web.config 文件中,设置 mode=SQLServer 并设置 sqlConnectionString 属性。例如,sqlConnectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。
      

  11.   

    <!--  会话状态设置
              默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。
              如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
             若要禁用 Cookie,请设置 sessionState cookieless="true"。
        -->
        <sessionState 
                mode="InProc"
                stateConnectionString="tcpip=127.0.0.1:42424"
                sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
                cookieless="false" 
                timeout="20" 
        />配置这个东西就可以将session保存到SQL中
      

  12.   

    强列建议使用cookie,绝对能满足你的要求
      

  13.   

    我已经贴了一个连接了,怎么就没人看?
    难道非要我把内容贴出来才行?http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpgenref/html/gngrfsessionstatesection.asp
    使用 SQLServer 模式 在运行 SQL Server 的计算机(它将存储会话状态)上运行 InstallSqlState.sql(默认的安装位置为 <驱动器>:\systemroot\Microsoft.NET\Framework\version)。这将创建一个名为 ASPState 的数据库,该数据库具有新的存储过程并且在 TempDB 数据库中具有 ASPStateTempApplications 表和 ASPStateTempSessions 表。 
    在应用程序的 Web.config 文件中,设置 mode=SQLServer 并设置 sqlConnectionString 属性。例如,sqlConnectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。
      

  14.   

    使用 SQLServer 模式,session是保存在外存中的,当web服务器意外重启的时候也能够准确恢复Session,所以它是比 StateServer 模式还要安全的。当然,由于需要对Session进行二进制序列化,并且需要读写数据库,所以与纯内存方式的另两种模式相比有一些性能降低。InPro 模式是保存在应用程序进程当中。但是,应用程序进程的生存期依赖于很多因素,当配置修改的时候重启,当缓冲进程过百(ASP1.1好像设置缓冲池容纳100进程)的时候重启,几十分钟后自动重启一次,等等。StateServer模式保存session不受应用程序进程生存期的影响。当应用程序因为某种原因重启的时候,Session不会丢失。但是,它是保存的内存中的。
      

  15.   

    <!--  会话状态设置
              默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。
              如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
             若要禁用 Cookie,请设置 sessionState cookieless="true"。
        -->
        <sessionState 
                mode="SQLServer"
                stateConnectionString="tcpip=127.0.0.1:42424"
                sqlConnectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=yourdatabase"
                cookieless="false" 
                timeout="20" 
        />