.net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期
时间:2022-03-10 17:35
图12-3 修改服务启动类型为自动
图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所示。
图12-5 修改状态服务端口号 图12-6 向StateServer默认的Session中写入自定义类出错
图12-7 使用服务器资源管理器浏览ASPState数据库 图12-8 存放Session数据的tempdb数据库
图12-9 把大量数据存放到Session中
图12-10 超时后SessionID发生变化
图12-11 使用trace观察会话状态
· 如何立刻让Session失效。比如用户退出系统后,Session中保存的所有数据全部失效,可以使用以下代码来让Session失效。
Session.Abandon();
第一次访问网站的时候创建Session超时后销毁
不要存放大量数据
第一次访问网站的时候创建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