Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 461|回复: 0

ASP Session的功能的缺陷以及解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-9 12:25:43 | 显示全部楼层 |阅读模式

    http://www.cnblogs.com/jhy55/p/3376925.html

     

    目前ASP的开发人员都正在使用Session这一强大的功能,但是在他们使用的过程中却发现了ASP Session有以下缺陷:

    • 进程依赖性:ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。
    • Session状态使用范围的局限性:刚一个用户从一个网站访问到另外一个网站时,这些Session信息并不会随之迁移过去。例如:facebook网站的WWW服务器可能不止一个,一个用户登录之后要去各个频道浏览,但是每个频道都在不同的服务器上,如果想在这些WWW服务器共享Session信息怎么办呢?
    • Cookie的依赖性:实际上客户端的Session信息是存储与Cookie中的,如果客户端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。

    鉴于ASP Session的以上缺陷,微软的设计者们在设计开发 ASP.NET Session时进行了相应的改进,完全克服了以上缺陷,使得ASP.NET Session成为了一个更加强大的功能。

     

    一,Session 描述(解决方案):

    在用户发出首个请求时创建直到用户结束回话

    1、  SessionStateModule负责产生session

    2、  HttpApplication在请求的处理管道中会检查当前的请求是否实现了System.Web.SessionState. IRequiresSessionState 接口,如果实现了则为当前的请求分配一个session

    3、  Web.config中配置 <sessionState cookieless=”true“> 则会在URL将当前sessionid带上

    4、  Session保存的位置:

      <sessionState mode="InProc | StateServer| SQLServer">
    <sessionState stateConnectionString="tcpip=127.0.0.1:42424" mode="StateServer"/>

    创建数据库脚本文件在

    C:\Windows\Microsoft.NET\Framework\v4.0.30319(v4.0.30319 根据你的 Framework 版本 )

    下的:

    InstallPersistSqlState.sql 和 InstallSqlState.sql

    可以用下面命令在 VS2012 开发人员命令提示 保存Session的数据库  

    aspnet_regsql -U sa -P 123–ssadd -sstype c -d aspnetdb (:123 是数据库密码)

    web.config可以配置成:

    <sessionState  sqlConnectionString="server=.;database=aspnetdb;uid=sa;pwd=;" allowCustomSqlDatabase="true"  mode="SQLServer"/>

       执行之后再数据库会有以下类似的数据库

    二,将服务器Session信息存储在进程外

    首先,让我们来打开管理工具->服务,找到名为:ASP.NET State Service的服务,启动它。实际上,这个服务就是启动一个要保存Session信息的进程。启动这个服务后,你可以从Windows任务管理器->进程中看到一个名为aspnet_state.exe的进程,这个就是我们保存Session信息的进程。

    然后,回到Web.config文件中上述的段落中,将mode的值必须有为StateServer 的值。保存文件后的重新打开一个IE,打开SessionState.aspx页面,保存一些信息到Session中。这时,让我们重起IIS,再回到SessionState.aspx页面中查看刚才的Session信息,发现没有丢失。

    实际上,这种将Session信息存储在进程外的方式不光指可以将信息存储在本机的进程外,还可以将Session信息存储在其他的服务器的进程中。这时,不光需要将mode的值改为StateServer,还需要在stateConnectionString中配置相应的参数。例如你的计算你是192.168.0.1,你想把Session存储在IP为192.168.0.2的计算机的进程中,就需要设置成这样:stateConnectionString="tcpip=192.168.0.2:42424"。当然,不要忘记在192.168.0.2的计算机中装上.NET Framework,并且启动ASP.NET State Services服务。

     ===============================个人理解

    两种方式  使用 状态服务器  在计算机管理的服务中有一个叫  ASP.net 状态服务器
     
    使用方式配置文件中配置
     
       <!--/配置网站的session存储模式-->
        <!--<sessionState stateConnectionString="tcpip=127.0.0.1:42424" mode="StateServer">
        </sessionState>-->
     
     
     第二种方式是  使用数据库存session
        可以用下面命令安装保存Session的数据库 aspnet_regsql -U sa -P master –ssadd -sstype c -d aspnetdb     
    这是 framework 安装路径下的 aspnet_regsql.exe 加上/?可以查看参数的说明。
     
    web.config可以配置成: <sessionState sqlConnectionString="server=.;database=aspnetdb;uid=sa;pwd=;" allowCustomSqlDatabase="true" mode="SQLServer"/>

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-21 02:53 , Processed in 0.061773 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表