问题:HttpContext.Current.Session;结果:Session与HttpContext.Current.Session到底有什么区别呢?
我在做练习的时候遇到了这样一个问题,在母版页页面中写入登录和密码修改的js代码,在登录的方法中写 入 HttpContext.Current.Session.Add("UserPwd", dtUser.Rows[0] [1].ToString()),以便让这个session在做密码修改的时候和用户输入的密码做比较。但是在母版页的js代码中写入 Session["UserPwd"].ToString()总是报错,错误提示是:未将引用对象实例化。在母版页的page_load()方法中写入 string ss=Session["UserPwd"].ToString()是可以得到密码的。
在同事的帮助下,找到了解决方法,就是在js方法中将Session["UserPwd"].ToString()改成
HttpContext.Current.Session["UserPwd"].ToString()就可以得到密码了。但此时page_load()
方法下的string ss=Session["UserPwd"].ToString()又开始报错。所以新的问题又出来了,Session与
HttpContext.Current.Session到底有什么区别呢?以下是我在MSDN中找到的结果:
Session 属性提供对 HttpSessionState 类的属性和方法的编程访问。由于 ASP.NET 页包含
对 System.Web 命名空间(含有 HttpContext 类)的默认引用,因此在 .aspx 页上可以引用 HttpContext 的成
员,而不需要使用对 HttpContext 的完全限定类引用。例如,可使用 Session("SessionVariable1") 获取或设置会
话状态变量 SessionVariable1 的值。但是,如果要从 ASP.NET 代码隐藏模块中使用 HttpResponse 的成员,则必须
在模块中包括对 System.Web 命名空间的引用,同时还要包括对当前活动的请求/响应上下文以及要使用的 System.Web 中的类的完全限
定引用。例如,在代码隐藏页中,必须指定完全限定名
称 HttpContext.Current.Session("SessionVariable1")。
如果未启用会话状态,则无法设置或获取会话状态值。若要为应用程序配置会话状态设置,请在 Web.config 文件中设
置 sessionState 元素的 mode 属性。启用会话状态后,如果请求一个会话状态变量中不存在的值,则会返回 null。
难道是和这个有关系么?如果说二者没有区别,为什么在将Session["UserPwd"].ToString()改成
HttpContext.Current.Session["UserPwd"].ToString()之后,原本正确可以得到结果的
string ss=Session["UserPwd"].ToString()报错了呢?还希望在这个平台上得到大家的帮助!谢谢
两个是相同的对象
HttpContext指的是当前请求的HttpHandler实例,而Page就是这个实例,所以访问上没有区别,主要用于一些场景无法获取Page对象,只能用上下文来获取请求实例的情况
页面当中的Session相当于 this.Session
而在不属于页面的时候(比如你所说的母版页,它可不是继承自System.Web.UI.Page;或者是BLL层)就只能通过上下文来获得Session了
Page的 Context属性跟HttpContext.Current引用相等的
这是用reflector查看到的代码。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
protected internal override HttpContext Context{ [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get { if (this._context == null) { this._context = HttpContext.Current; } return this._context; }} public virtual HttpSessionState Session{ get { if (!this._sessionRetrieved) { this._sessionRetrieved = true; try { this._session = this.Context.Session; } catch { } } if (this._session == null) { throw new HttpException(SR.GetString("Session_not_enabled")); } return this._session; }} |
问题:HttpContext.Current.Session;结果:Session与HttpContext.Current.Session到底有什么区别呢?的更多相关文章
- Session 、Application 和 HttpContext 的使用区别
在ASP.NET WEB页面开发中,经常会需要保存一些信息,以便在不同的页面或时间段都能够访问到.这其中便会用到Session和Application. Session .Application 和 ...
- 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session
什么是 Session 在 web 应用开发中,Session 被称为会话.主要被用于保存某个访问者的数据. 由于 HTTP 无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的 ...
- 【转】asp.net中利用session对象传递、共享数据[session用法]
来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...
- Cookie和Session(session过程和设置进程外session)
cookie 和 session 的区别 cookie 是保存在客户端上的一种机制 而session 是保存在服务端的一种机制 cookie的理解: 打个简单的比方,一个人生病了去A医院看病,回 ...
- asp.net中利用session对象传递、共享数据[session用法]
下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...
- session原理及实现集群session的方案原理
对Web服务器进行集群,Session的安全和同步是最大的问题,实现Session同步有很多种方案,常见的可能的方式有: 1.客户端Cookie加密. 用的较少,此处不详述. 2.Session ...
- [PHP]session回收机制及php.ini session生命期
由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效.当一个有效请求发生时,PHP会根据全局变量 session.gc_probability/sessi ...
- org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: getAttribute: Session already invalidated] with root cause
1.遇到以下异常,找了好长时间,终于解决,报的异常如下: 七月 07, 2017 3:02:16 下午 org.apache.catalina.core.StandardWrapperValve in ...
- node中session存储与销毁,及session的生命周期
1.首先在使用session之前需要先配置session的过期时间等,在入口文件app.js中 app.use(express.session({ cookie: { maxAge: config.g ...
随机推荐
- BZOJ2877 [Noi2012]魔幻棋盘
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- Java编程思想 两个主函数
//: initialization/DynamicArray.javapackage initialization; /* Added by Eclipse.py */// Array initia ...
- DelphiXE
1. http://blog.csdn.net/tp26021340/article/details/45953669 2. 3. 4. 5.
- spring: 使用profiles选择数据源(结合嵌入式数据源EmbeddedDatabaseBuilder)
一般需要在不同的环境(日常环境.性能测试环境.预发环境和生产环境等等)中配置不同的数据源,例如,在开发时非常适合使用嵌入式数据源.在QA环境中比较适合使用DBCP的BasicDataSource.在生 ...
- 直方图均衡化的 C++ 实现(基于 openCV)
这是数字图像处理课的大作业,完成于 2013/06/17,需要调用 openCV 库,完整源码和报告如下: #include <cv.h> #include <highgui.h&g ...
- 在ubuntu上安装svn+apache2
参考网站: http://www.thinksaas.cn/group/topic/335434/ http://blog.sina.com.cn/s/blog_3eba8f1c0100dqk1.ht ...
- DocString
文档字符串:写注释专用的, 在函数的第一个逻辑行的字符串是这个函数的 文档字符串 .注意,DocStrings也适用于模块和类,我们会在后面相应的章节学习它们. 文档字符串的惯例是一个多行字符串,它的 ...
- 10-THREE.JS perspective透视摄像机和orthographic正交摄像机区别
<!DOCTYPE html> <html> <head> <title></title> <script src="htt ...
- 条款39:明智的使用private继承
首先看一下private继承的法则:class之间的继承关系如果是private的话,那么编译器不会将一个derived对象自动当作为一个base class对象. 从base class继承而来的所 ...
- 在Java中定义常量
方法一采用接口(Interface)的中变量默认为static final的特性. 方法二采用了Java 5.0中引入的Enum类型. 方法三采用了在普通类中使用static final修饰变量的方法 ...