Session深入学习,进程外的Session

当用户登入页面跳转时候,我们会将用户登录信息保存在服务端一个键值对的Session(Session池)中。那么Session池又是在哪里呢?

它最终默认存放的文件是一个叫做 aspnet_wp.exe的可执行程序中(做为一个辅助进程)。路径就在Framework/版本 下面。 它有一个缺点,容量有限!!

一旦Session池满了,存的数据太多了,这个aspnet_wp.exe程序就会重启,Session就会丢失!(一个微软官方的bug,不可修复)

什么叫服务呢?

其实就是一个可执行的exe程序,只是它没有界面操作而已。

那怎么办呢?

解决方案

1.进程外保存:

再也不担心网站的重启或者关闭丢失Seesion 不要再用这个aspnet_wp.exe保存session了,我们使用专门保存session的状态服务程序 aspnet_state.exe,默认端口42424。

此端口预留给Framework通信使用 。

2.SqlServer数据库保存:

不管是关闭网站重启网站,关闭状态服务都不会影响到Session的保存 将session存入aspnet数据库中。

必要的消耗:通信消耗,数据必要的属性:可序列化

Session是可设置保存位置的

如何做到进程外保存Session 利用状态服务

1.开启电脑状态服务 ASP.NET State Service

2.配置web.config文件

<system.web>
<sessionState mode="">
</sessionState>
<!-- mode Custom 自定义|
   Inpoc 进程内的(默认)|
   Off 关闭不使用Session |
   SQLServer SQL保存 |
   StateServer 进程外(浏览器不可以关,因为SessionId是保存在客户端浏览器缓存Cookie中的)
-->
<system.web>

默认端口42424是可以根据注册表更改的

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters Port修改

修改后 配置文件一定要同步

<system.web>
<sessionState mode="StateServer" stateConnectionString = "tcpip=localhost:42424">
</sessionState>
<system.web>

注意:如果需要将一个对象类保存在进程外的Session中,一定要标识这个类是可序列化的。[Serializable]

利用SQL保存Session

如果要使用 SQL 保存Session数据,首先要在Framework/v4.0.30319安装目录运行一个叫 aspnet_regsql.exe 的可运行程序。它是一个向导,它会自动在数据库创建一些必要的表。

然后执行InstallSqlState.sql或者InstallSqlStateTemplate.Sql 有好多个,分为临时存储,和持久化存储自己选择,

注意:需要使用SQLServerAgent服务--因为调度作业

再然后

配置web.config

<!-- 配置Session --> 
<system.web> <sessionState mode="SQLServer" > </sessionState> </system.web>

保存在数据库 ASPState 中,里面有两张表 ASPStateTempApplicaions (两列 AppId,AppName),ASPStateTempSessions

Global.asax 全局文件错误处理

//当网站第一次被请求的时候运行         
void Application_Start(object sender, EventArgs e)     
{
//一般在这个方法中 做一些网站全局 的配置读取及初始化
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
} // 在出现未处理的错误时运行的代码
//一般可以用来做 错误日志
void Application_Error(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
Exception ex = app.Context.Server.GetLastError();
app.Context.Response.Redirect("06Err.aspx?err=" +app.Context.Server.UrlEncode(ex.Message));
app.Context.Response.End();
//app.Context.Response.Redirect("06Err.aspx");
//string logFile = app.Context.Server.MapPath("04Log.txt");
//System.IO.File.AppendAllText(logFile, ex.Message);
} void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
} void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不引发该事件。 }

进程外Session保存和全局文件错误捕获的更多相关文章

  1. Asp.Net进程外Session(状态服务器Session、数据库Session)

    介绍 我们知道,当浏览器关闭,或者网站重启的时候,会话就结束了.即Seesion就丢失了.(当Web.config配置文件改动,哪怕什么内容都不加,仅仅往配置文件中加一个空格都是改we.config变 ...

  2. 配置进程外Session 同时解决一个奇怪的BUG 因为SQLserver 服务器名不是默认的.或者localhost而引发的一系列问题

    用公司的电脑学习如鹏网的视频,开发一个项目,用到了进程外session,因为公司电脑SQLServer 是2008 服务器名称是.  然后参考这篇文章进行设置进程外session 很顺利 完成了设置. ...

  3. 进程外session

    进程外session A  SqlServer 1.管理员身份运行cmd 2.更换目录  cd c:\Windows\Microsoft.NET\Framework\v4.0.30319> 3. ...

  4. Cookie和Session(session过程和设置进程外session)

    cookie 和  session 的区别 cookie 是保存在客户端上的一种机制   而session 是保存在服务端的一种机制 cookie的理解: 打个简单的比方,一个人生病了去A医院看病,回 ...

  5. 第四节:框架前期准备篇之进程外Session的两种配置方式

    一. 基本介绍 1. 背景:Asp.Net默认的Session机制是进程内,存储在服务器端内存中,有这么几个缺点: ①:既然存在内存中,空间有限,不能存储大数据量信息,数据量多的话Session会被挤 ...

  6. 配置进程外Session

    配置进程外Session: (1)将服务器Session信息存储在进程外           <1> 首先,开启asp.net state 服务: 控制面板 -> 程序和功能 -&g ...

  7. 第十六节:Asp.Net Core中Session的使用、扩展、进程外Session

    一. 简介 关于Session的原理可参照Asp.Net版本Session的文章,去查阅. 1. 普通用法 (1).通过Nuget引入[Microsoft.AspNetCore.Http]程序集,Co ...

  8. 探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  9. 学习笔记16_页面缓存/进程外Session

    *页面缓存:适用于访问量较高的网站 <%@OutputCache Duration="15"//缓存15秒  VaryByParam='*' //请求的任何一处发生改变,缓存 ...

随机推荐

  1. JavaScript工程师都应懂的33个概念

    最近福利发的有点多啊,各种硬干货,小伙伴们是不是觉得很爽啊.Github真的蕴含着各种各样的宝藏,难怪各个大厂也都纷纷贡献自己的代码到Github上. 所以各种干货还是会源源不断的po给大家,觉得有帮 ...

  2. 使用scss + react + webpack + es6实现幻灯片

    写在前面: 刚学习完慕课网里的一个幻灯片案例,自己加了刚学的react,两者结合.首先让大家看看效果 点击此处 你可以先用纯js实现上面的效果:我的github上的 JS代码 或者 观看慕课提供的课程 ...

  3. 【51nod】1709 复杂度分析

    题解 考虑朴素的暴力,相当于枚举u点的每个祖先f,然后统计一下这个点f除了某个儿子里有u的那个子树之外的节点个数,乘上f到u距离的二进制1的个数 那么我们用倍增来实现这个东西,每次枚举二进制的最高位j ...

  4. USACO 5.3 Network of Schools

    Network of SchoolsIOI '96 Day 1 Problem 3 A number of schools are connected to a computer network. A ...

  5. pyqt5猜数小程序

    程序界面用qt设计师制作,并用pyuic5命令转换成form.py文件 #-*- coding:utf-8 -*- from PyQt5.QtWidgets import QApplication,Q ...

  6. 洛谷 P3071 [USACO13JAN]座位Seating-线段树区间合并(判断找,只需要最大前缀和最大后缀)+分治+贪心

    P3071 [USACO13JAN]座位Seating 题目描述 To earn some extra money, the cows have opened a restaurant in thei ...

  7. CPU线程 和 Java线程

    一 cpu个数.核数.线程数的关系 cpu个数:是指物理上,也及硬件上的核心数: 核数:是逻辑上的,简单理解为逻辑上模拟出的核心数:一个CPU核心数模拟出2线程的CPU 线程数:是同一时刻设备能并行执 ...

  8. hdu-1540线段树刷题

    title: hdu-1540线段树刷题 date: 2018-10-18 19:55:21 tags: acm 刷题 categories: ACM-线段树 概述 哇,,,这道线段树的题可以说是到目 ...

  9. 一次ygc越来越慢的问题排查过程

    问题发现场景 某天突然收到线上应用的gc时间过长的告警,刚开始只有一台机器偶尔报一下,后续其他机器也纷纷告警,具体告警的阈值是应用10分钟内ygc的总时长达到了6.6s. 初步排除过程 按照gc问题常 ...

  10. java中的dao模式

    java中Dao模式   什么是DAO   1.Data Access Object(数据存取对象) 2.位于业务逻辑和持久化数据之间 3.实现对持久化数据的访问 DAO模式的作用 1隔离业务逻辑代码 ...