asp.net中Session的操作
asp.net中Session的操作
asp.net中Session的操作session是怎么存储,提取的?
在服务器端有一个session池,用来存储每个用户提交session中的数据,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端,而这个SessionID是一cookie的方式保存的在客户端的内存中的,如果想要得到Session池中的数据,服务器就会根据客户端提交的唯一SessionID标识给出相应的数据返回。
Session池中每个客户端的数据是怎么存储的?
1.存储在Session池中的数据是全局型的数据,可以跨页面访问,每个SessionID中只存储唯一的数据,如:首先你这样设定:session["userName"]="admin",然后你在会话还没结束的session还没过期的情况下,你又设定:session["userName"]="123";这样这个SessionID没变,然而Session池中的数据则被覆盖。此时session["userName"]的值就是“123”,而不是其它。
2.Session池中的数据不能跨进程访问。如:打开一个页面写入session[“userName”]="admin";然后login页面不关闭,即此会话不结束,在这是你再在另外一个浏览器中打开一个login.aspx页面则session["userName"]=null
session的声明周期与销毁
1.session存储数据计时是滚动计时方式。具体是这样的,如果你打开写入session,从写入开始,此页面如果一直没有提交操作,则默认时间是20分钟,20分钟后session被服务器自动销毁,如过有提交操作,服务器会从提交后重新计时以此类推,直至设定时间内销毁。
2.可以设置session的销毁时间。上面代码有提到。
3、session中保存的数据是在服务端的,而每个用户如进行登录操作,都要进行session数据写入,所以建议慎用session,就是少用。
ASP.NET操作session的方法
public static class SessionHelper2
{
/// <summary>
/// 添加Session,调动有效期为20分钟
/// </summary>
/// <param name="strSessionName">Session对象名称</param>
/// <param name="strValue">Session值</param>
public static void Add(string strSessionName, string strValue)
{
HttpContext.Current.Session[strSessionName] = strValue;
HttpContext.Current.Session.Timeout = 20;
}
/// <summary>
/// 添加Session,调动有效期为20分钟
/// </summary>
/// <param name="strSessionName">Session对象名称</param>
/// <param name="strValues">Session值数组</param>
public static void Adds(string strSessionName, string[] strValues)
{
HttpContext.Current.Session[strSessionName] = strValues;
HttpContext.Current.Session.Timeout = 20;
}
/// <summary>
/// 添加Session
/// </summary>
/// <param name="strSessionName">Session对象名称</param>
/// <param name="strValue">Session值</param>
/// <param name="iExpires">调动有效期(分钟)</param>
public static void Add(string strSessionName, string strValue, int iExpires)
{
HttpContext.Current.Session[strSessionName] = strValue;
HttpContext.Current.Session.Timeout = iExpires;
}
/// <summary>
/// 添加Session
/// </summary>
/// <param name="strSessionName">Session对象名称</param>
/// <param name="strValues">Session值数组</param>
/// <param name="iExpires">调动有效期(分钟)</param>
public static void Adds(string strSessionName, string[] strValues, int iExpires)
{
HttpContext.Current.Session[strSessionName] = strValues;
HttpContext.Current.Session.Timeout = iExpires;
}
/// <summary>
/// 读取某个Session对象值
/// </summary>
/// <param name="strSessionName">Session对象名称</param>
/// <returns>Session对象值</returns>
public static string Get(string strSessionName)
{
if (HttpContext.Current.Session[strSessionName] == null)
{
return null;
}
else
{
return HttpContext.Current.Session[strSessionName].ToString();
}
}
/// <summary>
/// 读取某个Session对象值数组
/// </summary>
/// <param name="strSessionName">Session对象名称</param>
/// <returns>Session对象值数组</returns>
public static string[] Gets(string strSessionName)
{
if (HttpContext.Current.Session[strSessionName] == null)
{
return null;
}
else
{
return (string[])HttpContext.Current.Session[strSessionName];
}
}
/// <summary>
/// 删除某个Session对象
/// </summary>
/// <param name="strSessionName">Session对象名称</param>
public static void Del(string strSessionName)
{
HttpContext.Current.Session[strSessionName] = null;
}
}
asp.net Session丢失的原因
原因1:
bin目录中的文件被改写,asp.net有一种机制,为了保证dll重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致Session丢失,所以如果有access数据库位于bin目录,或者有其他文件被系统改写,就会导致Session丢失
原因2:
文件夹选项中,如果没有打开“在单独的进程中打开文件夹窗口”,一旦新建一个窗口,系统可能认为是新的Session会话,而无法访问原来的Session,所以需要打开该选项,否则会导致Session丢失
原因3:
似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开
原因4:
Session的时间设置是不是有问题,会不会因为超时造成丢失
原因5:
IE中的cookie数量限制(每个域20个cookie)可能导致session丢失
原因6:
使用web garden模式,且使用了InProc mode作为保存session的方式
- php防session劫持(使用SMB共享来绕过php远程文件包含的限制执行RFI的利用)
- phpsession如何用(如何解决PHP获取不到SESSION信息之一般情况)
- mybatis测试出现空指针(Mybatis非配置原因,导致SqlSession was not registered for synchronization异常)
- 如何让yii2高级模板运行起来(Yii框架Session与Cookie使用方法示例)
- django session验证(Django框架验证码用法实例分析)
- php回收机制(PHP session垃圾回收机制实例分析)
- php实现session入库实例(PHP使用Session实现上传进度功能详解)
- phpsession方法(PHP SESSION机制的理解与实例)
- laravel获取客户端ip(对laravel的session获取与存取方法详解)
- cookie和session流程(浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同)
- html标签session什么意思(在html页面中取得session中的值的方法)
- php怎么判断是否有session(PHP中Session ID的实现原理实例分析)
- SqlServer中如何解决session阻塞问题(SqlServer中如何解决session阻塞问题)
- dedecms的使用教程(解析DedeCms中data目录下的sessions是什么文件)
- php 会话session实现用户登录功能(PHP cookie,session的使用与用户自动登录功能实现方法分析)
- phpsetcookie参数说明(PHP的cookie与session原理及用法详解)
- 蓝天代表什么(蓝天代表什么生肖)
- 今天要吃什么(今天要吃什么菜)
- 营养餐是什么(学校营养餐是什么)
- 谁说女子不如男 范冰冰演的武则天只是其一,另外两位你认识吗(谁说女子不如男)
- 杯酒人生---瓦伦丁酒杯和奥丁格啤酒(杯酒人生---瓦伦丁酒杯和奥丁格啤酒)
- 中秋节买啤酒,预算超过7元试试这8种啤酒,麦香浓郁都是真啤酒(预算超过7元试试这8种啤酒)
热门推荐
- opencv人脸识别算法(python利用Opencv实现人脸识别功能)
- 用python简单实现登录功能(使用python的pexpect模块,实现远程免密登录的示例)
- 阿里云服务器总被攻击怎么办(香港云服务器遭遇恶意攻击怎么处理?)
- dedecms授权协议(360提示DedeCms全局变量覆盖漏洞临时解决方法)
- python中迭代器的作用(Python3.5迭代器与生成器用法实例分析)
- php网页生成程序(php生成静态页面并实现预览功能)
- apache安全配置(apache在win2003下的安全设置配合文件夹权限目录,很好很安全)
- 在html中使用javascript实例代码(原生 JS+CSS+HTML 实现时序图的方法)
- mysql数据库基本增删改查基本语句(MySQL表的增删改查基础教程)
- 如何让yii2高级模板运行起来(Yii框架数据库查询、增加、删除操作示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9