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的利用)
- laravel关闭错误提示(解决laravel session失效的问题)
- mybatis测试出现空指针(Mybatis非配置原因,导致SqlSession was not registered for synchronization异常)
- cookie和session流程(浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同)
- SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待(SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待)
- php回收机制(PHP session垃圾回收机制实例分析)
- html标签session什么意思(在html页面中取得session中的值的方法)
- asp.net中Session的操作
- phpsession方法(PHP SESSION机制的理解与实例)
- php 设置sessionid生成机制(PHP Cli 模式设置进程名称的方法)
- HTMl5 sessionStorage和localStorage
- phpsession怎么用(PHP实现提高SESSION响应速度的几种方法详解)
- SqlServer中如何解决session阻塞问题(SqlServer中如何解决session阻塞问题)
- phpsession如何用(如何解决PHP获取不到SESSION信息之一般情况)
- php怎么判断是否有session(PHP中Session ID的实现原理实例分析)
- phpsetcookie参数说明(PHP的cookie与session原理及用法详解)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
- 职场人改不掉这4个习惯,只会越混越穷,一辈子也翻不了身(职场人改不掉这4个习惯)
- 华为 联想等46家公司笔试面试题,涉及各行各业,建议收藏(联想等46家公司笔试面试题)
热门推荐
- contenttype类型
- linux目录操作功能(Linux 目录结构详细介绍)
- phpweb添加自定义模板(php静态化页面 htaccess写法详解htaccess怎么写?)
- python画图教程(详解用Python练习画个美队盾牌)
- 配置ftp服务器基本步骤(搭建FTP服务器的简单实例)
- iis服务器ftp设置(在云服务器上使用iis搭建一个ftp站点的方法图解)
- sqlserver 查询数据库增长设置(SQL设置SQL Server最大连接数及查询语句)
- Sql Server中的Null值
- 将匿名对象作为Model数据传给View
- dedecms搜索功能怎么设置详细(织梦Dedecms软件频道下载次数真实显示的权宜修改)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9