您的位置:首页 > 博客中心 > 数据库 >

.net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期

时间:2022-03-10 17:35

图12-3  修改服务启动类型为自动

gxlsystem.com,布布扣

图12-4  观察任务管理器的进程页

n  第2步,在system.web节点中加入:

 

stateNetworkTimeout="20">

n  stateConnectionString表示状态服务器的通信地址(IP:服务端口号)。由于我们现在在本机进行测试,这里设置成本机地址127.0.0.1。状态服务默认的监听端口为42422。当然,您也可以通过修改注册表来修改状态服务的端口号。

n  1.在运行中输入regedit启动注册表编辑器。

n  2.依次打开HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_stateParameters节点,双击Port选项,如图12-5所示。

    gxlsystem.com,布布扣

        图12-5  修改状态服务端口号            图12-6  向StateServer默认的Session中写入自定义类出错

            gxlsystem.com,布布扣

    图12-7  使用服务器资源管理器浏览ASPState数据库      图12-8  存放Session数据的tempdb数据库

图12-9  把大量数据存放到Session中

gxlsystem.com,布布扣

图12-10  超时后SessionID发生变化

gxlsystem.com,布布扣

图12-11  使用trace观察会话状态

·      如何立刻让Session失效。比如用户退出系统后,Session中保存的所有数据全部失效,可以使用以下代码来让Session失效。

Session.Abandon();

 

第一次访问网站的时候创建Session超时后销毁

不要存放大量数据

 

在使用Session的过程中你可能还会遇到很多奇怪的问题,结束本节之前笔者列出了几条常见的FAQ,供大家参考:

·      为什么每次请求的SessionID都不相同?

n  可能是没有在Session里面保存任何信息引起的,即程序中任何地方都没有使用Session。只有在Session中保存了内容后,Session才会和浏览器进行关联,此时的SessionID将不会再变化。

·      为什么当我设置cookieless为true后,在重定向的时候会丢失Session?

n  当使用cookieless时,你必须使用相对路径替换程序中的绝对路径,如果使用绝对路径,ASP.NET将无法在URL中保存SessionID。

·      有办法知道应用程序的Session在运行时占用了多少内存吗?

n  没有办法,你可以通过察IIS进程(InProc模式)或者aspnet_state进程(StateServer模式)大致估计。

·      有没有可能知道整个网站使用Session的用户列表?

n  对于InProc模式和StateServer模式很难,对于SqlServer模式你可以查询存储Session的表进行尝试。

·      当页面中设了frameset,发现在每个frame中显示页面的SessionID在第一次请求时都不相同,为什么?

n  原因是你的frameset是放在一个HTML页面上而不是ASPX页面。在一般情况下,如果frameset是aspx页面,当你请求页面时,它首先将 请求发送到Web服务器,此时已经获得了SessionID,接着浏览器会分别请求Frame中的其他页面,这样所有页面的SessionID就是一样 的,就是FrameSet页面的SessionID。然而如果你使用HTML页面做FrameSet页面,第一个请求将是HTML页面,当该页面从服务器 上返回时并没有任何Session产生,接着浏览器会请求Frame里面的页面,这样,这些页面都会产生自己的SessionID,所以在这种情况下就可 能出现这种问题。当你重新刷新页面时,SessionID就会一样,并且是最后一个请求页面的SessionID。

.net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期,布布扣,bubuko.com

热门排行

今日推荐

热门手游