zoukankan      html  css  js  c++  java
  • Session持久化

     

          Session持久化

        关于Session持久化这方面的话题,有很多人已经写过了,但是,毕竟这是我的项目经验,更加真实,可用。
        
    进入主题。

    情景一,Session ID在客户端的状态
            
    情景一中,saved in cookies
    情况
            
    ID保存在client端的Cookies集合中
            缺点是,如果client端的cookie被禁用,那么ID无法保存
            
    设置cookieless="false"

    <sessionState
    mode=
    "InProc"
    stateConnectionString=
    "tcpip=127.0.0.1:42424"
    sqlConnectionString=
    "datasource=127.0.0.1;userid=sa;password="
    cookieless=
    "false"
    timeout="20"/>

            情景一中,saved in url情况
            
    MS为了解决cookie被禁时,也能正常保存ID,在.net2.0中可以把ID保存在URL中.
            
    设置cookieless="true"

    <sessionState
        
    mode="InProc"
        
    stateConnectionString="tcpip=127.0.0.1:42424"
        
    sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
        
    cookieless="true"
        
    timeout="20"/>

           情景二,Session状态在服务器中的三中模式,进程内、进程外、数据库。
                
    情景二中,saved in 进程内
                
    设置mode="InProc"
                
    优点;保存在本机内存中,无需跨网络,访问内存速度快
                
    缺点;如果IIS进程发生异常或者WebSite有文件变更,都被asp.netRuntime监视,然后重新设置Session状态

           <sessionState
                
    mode="InProc"
              
    stateConnectionString="tcpip=127.0.0.1:42424"
                
    sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
                
    cookieless="false"
                
    timeout="20"/>

               情景二中,saved in 进程外
               
    设置mode="StateServer",启动asp.net状态服务
               
    定位注册表
                
    HKEY_LOCAL_MACHINE/SYSTEM/ControlSett001/Services/aspnet_state/Parameters“修改AllowRemoteConnection=1Port=42424
               注意这些参数都是十进制类型,且这些设置是在访问远程asp.net状态服务的必要设置。
               
    优点;稳定,即使关闭WWW服务,只要启动asp.net状态服务,Session状态依然存在,不信你试试。
               
    如果把状态保存在非本机上只需修改上面的注册表,修改stateConnectionString="tcpip=RemoteIP:Remoteport",
               如果状态保存在远程机上的asp.net状态服务中,那么当页面关闭的时候,Session状态马上失效,
               不管你的状态保存时间设置时间有多长,一律失效
               不信可以考试试,^-^

        <sessionState
            
    mode="StateServer"
        
        stateConnectionString="tcpip=127.0.0.1:42424"
            
    sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
            cookieless="false"
        
        timeout="20"/>

           情景二中,saved in 数据库
           
    设置
           

           <sessionState
            mode="SQLServer"
            stateConnectionString="tcpip=127.0.0.1:42424"
            sqlConnectionString="server=.\SQLEXPRESS;uid=sa;pwd=zqmingok"
            cookieless="false"
            timeout="20"/>

     

           启动SqlServerSqlServerAgent
           
    定位到[systemdrive]\winnt\Microsoft.NET\Framework\[version]\
           
    执行InstallSqlState.sql
           
    然后我们看tempdb数据库中多了两个用户表,而且多了一个ASPstate的空库,ASPStateTempApplicationsASPStateTempApplications表中
           存储的是应用程序信息,每个应用程序在启动的时候在这里会注册一条记录,包括应用程序的
    ID(通过哈希算法生成的)和应用程序名称,
           实际上Session信息是存储在了tempdb数据库的ASPStateTempSessions表中,另外查看管理->SQLServer代理->作业,
           发现也多了一个叫做
    ASPState_Job_DeleteExpiredSessions的作业,这个作业实际上就是每分钟去ASPStateTempSessions表中删除过期的Session信息。

    新建一个Asp.netWebSite,F5,一切OK
    效果图形 
    两张表
     
    ASPStateTempApplications表的数据

    ASPStateTempSessions表的数据

    ASPState_Job_DeleteExpiredSessions作业


    需要注意的地方;

    一,ASPStateTempApplicationsASPStateTempSessions表的权限用户是sa,既管理员。
    二,启动MsSqlSeverAgent用来执行清除过期Session的作业ASPState_Job_DeleteExpiredSessions
    三,如果MsSqlServerWebSite不在同一台机器上,那么设置sqlConnectionString="datasource=RemoteIP;userid=userName;password=userpwd"

    结束
        写得不妥之处,请多多指教!

  • 相关阅读:
    spring-data-jpa 二、多对一结构、Repository
    bootstrap学习(二)页面
    bootstrap学习(一)栅格、布局
    ArrayList源码学习
    python学习-Pillow图像处理
    python学习-抓取知乎图片
    python-os创建文件夹-create_dir_if_not_exist.py
    python-shutil学习
    python-argparse批量修改后缀名-batch_file_rename.py
    python-argparse使用
  • 原文地址:https://www.cnblogs.com/zqmingok/p/1537873.html
Copyright © 2011-2022 走看看