MVC中Session为空,怎么解决这个问题

Vic 2018-05-18 09:49:55
System.Web.HttpContext.Current.Sessionk空引用异常,配置应该是没有问题的:<sessionState mode="InProc" customProvider="DefaultSessionProvider">
...全文
1380 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vic 2018-09-12
  • 打赏
  • 举报
回复
谢谢大家的回答。
很多有用的知识点,虽然没有解决当前问题。当前问题解决办法。在global.ascx.cs文件里重写init()方法,并加上如下代码即可:
PostAuthenticateRequest += (s, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
  • 打赏
  • 举报
回复
服务用处很广法。所以站在把服务开发当作一种通用战略的角度,很自然地,只强调通用的编程技术(不使用 asp.net Session 概念而提供通用服务设计)有没有搞懂,而不是强调作为特例而启用服务器 Session。
  • 打赏
  • 举报
回复
针对所有系统。 asp.net 已经不怎么用来做页面了,就算是用来做页面也只占很少一部分。大量的前端页面、前端访问后台服务,都不用后台 Session。 服务开发,是通用的开发。所以你看到服务默认的情况是根本不带 Session。
Vic 2018-05-20
  • 打赏
  • 举报
回复
引用 12 楼 sp1234 的回复:
[quote=引用 5 楼 javaycl 的回复:]意思是不要使用session吗?管理系统如果不使用session的话,会比较麻烦吧
知识结构不同,所知道的编程格局也就不同。 不用 Session 才轻松方便。[/quote]针对所有的系统吗,还是说得具体分析?Session既然被创造出来,必然是有它的合理性和适用性的吧?
  • 打赏
  • 举报
回复
引用 5 楼 javaycl 的回复:
意思是不要使用session吗?管理系统如果不使用session的话,会比较麻烦吧
知识结构不同,所知道的编程格局也就不同。 不用 Session 才轻松方便。
  • 打赏
  • 举报
回复
看看,谢谢分享
正怒月神 2018-05-18
  • 打赏
  • 举报
回复
引用 9 楼 javaycl 的回复:
[quote=引用 8 楼 hanjun0612 的回复:] [quote=引用 7 楼 javaycl 的回复:] 使用session的,用户在服务器端保存session的本质,是通过cookie携带的sessionid到服务器,服务器通过sessionid来查找对应的session。 所以要允许ajax传递cookie
试了一下,还是null,不过找到另一个方法解决了问题:在global.asax.cs中重写init()加入PostAuthenticateRequest += (s, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);。[/quote] 是不是添加的有问题[/quote]应该没有吧[/quote] 服务器端设置了吗?https://blog.csdn.net/luoyong123456/article/details/51306227
Vic 2018-05-18
  • 打赏
  • 举报
回复
引用 8 楼 hanjun0612 的回复:
[quote=引用 7 楼 javaycl 的回复:]
使用session的,用户在服务器端保存session的本质,是通过cookie携带的sessionid到服务器,服务器通过sessionid来查找对应的session。
所以要允许ajax传递cookie
试了一下,还是null,不过找到另一个方法解决了问题:在global.asax.cs中重写init()加入PostAuthenticateRequest += (s, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);。[/quote]
是不是添加的有问题[/quote]应该没有吧
正怒月神 2018-05-18
  • 打赏
  • 举报
回复
引用 7 楼 javaycl 的回复:
使用session的,用户在服务器端保存session的本质,是通过cookie携带的sessionid到服务器,服务器通过sessionid来查找对应的session。 所以要允许ajax传递cookie
试了一下,还是null,不过找到另一个方法解决了问题:在global.asax.cs中重写init()加入PostAuthenticateRequest += (s, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);。[/quote] 是不是添加的有问题
Vic 2018-05-18
  • 打赏
  • 举报
回复
引用 6 楼 hanjun0612 的回复:
[quote=引用 5 楼 javaycl 的回复:] [quote=引用 3 楼 hanjun0612 的回复:] [quote=引用 2 楼 javaycl 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 如果你是在mvc的话,那么使用到额session命名空间就不一样了。 mvc中 controller 的session默认命名空间如下: 除非你在get和set时手动指定Session的命名空间。不然默认的不是System.Web.HttpContext.Current. 另外注意一下,controller和 apicontroller的session命名空间又是不一样,因此也要手动指定
我在set的时候全部手动指定的命名空间,如图[/quote] 哈哈,果然你还用的apiController。 那么出问题就不奇怪了。 因为从前台,如果是ajax访问的话,那么默认是不会携带cookie的。 那么如果没有cookie,就没有sessionid了。 既然没有sessionid,则肯定没办法在服务器找到之前保存过的session. 这个时候 ajax就需要 xhrFields: { //允许带上凭据 withCredentials: true },[/quote]意思是不要使用session吗?管理系统如果不使用session的话,会比较麻烦吧[/quote] 使用session的,用户在服务器端保存session的本质,是通过cookie携带的sessionid到服务器,服务器通过sessionid来查找对应的session。 所以要允许ajax传递cookie[/quote]试了一下,还是null,不过找到另一个方法解决了问题:在global.asax.cs中重写init()加入PostAuthenticateRequest += (s, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);。
正怒月神 2018-05-18
  • 打赏
  • 举报
回复
引用 5 楼 javaycl 的回复:
[quote=引用 3 楼 hanjun0612 的回复:] [quote=引用 2 楼 javaycl 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 如果你是在mvc的话,那么使用到额session命名空间就不一样了。 mvc中 controller 的session默认命名空间如下: 除非你在get和set时手动指定Session的命名空间。不然默认的不是System.Web.HttpContext.Current. 另外注意一下,controller和 apicontroller的session命名空间又是不一样,因此也要手动指定
我在set的时候全部手动指定的命名空间,如图[/quote] 哈哈,果然你还用的apiController。 那么出问题就不奇怪了。 因为从前台,如果是ajax访问的话,那么默认是不会携带cookie的。 那么如果没有cookie,就没有sessionid了。 既然没有sessionid,则肯定没办法在服务器找到之前保存过的session. 这个时候 ajax就需要 xhrFields: { //允许带上凭据 withCredentials: true },[/quote]意思是不要使用session吗?管理系统如果不使用session的话,会比较麻烦吧[/quote] 使用session的,用户在服务器端保存session的本质,是通过cookie携带的sessionid到服务器,服务器通过sessionid来查找对应的session。 所以要允许ajax传递cookie
正怒月神 2018-05-18
  • 打赏
  • 举报
回复
引用 2 楼 javaycl 的回复:
[quote=引用 1 楼 hanjun0612 的回复:] 如果你是在mvc的话,那么使用到额session命名空间就不一样了。 mvc中 controller 的session默认命名空间如下: 除非你在get和set时手动指定Session的命名空间。不然默认的不是System.Web.HttpContext.Current. 另外注意一下,controller和 apicontroller的session命名空间又是不一样,因此也要手动指定
我在set的时候全部手动指定的命名空间,如图[/quote] 哈哈,果然你还用的apiController。 那么出问题就不奇怪了。 因为从前台,如果是ajax访问的话,那么默认是不会携带cookie的。 那么如果没有cookie,就没有sessionid了。 既然没有sessionid,则肯定没办法在服务器找到之前保存过的session. 这个时候 ajax就需要 xhrFields: { //允许带上凭据 withCredentials: true },
Vic 2018-05-18
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
[quote=引用 2 楼 javaycl 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 如果你是在mvc的话,那么使用到额session命名空间就不一样了。 mvc中 controller 的session默认命名空间如下: 除非你在get和set时手动指定Session的命名空间。不然默认的不是System.Web.HttpContext.Current. 另外注意一下,controller和 apicontroller的session命名空间又是不一样,因此也要手动指定
我在set的时候全部手动指定的命名空间,如图[/quote] 哈哈,果然你还用的apiController。 那么出问题就不奇怪了。 因为从前台,如果是ajax访问的话,那么默认是不会携带cookie的。 那么如果没有cookie,就没有sessionid了。 既然没有sessionid,则肯定没办法在服务器找到之前保存过的session. 这个时候 ajax就需要 xhrFields: { //允许带上凭据 withCredentials: true },[/quote]意思是不要使用session吗?管理系统如果不使用session的话,会比较麻烦吧
正怒月神 2018-05-18
  • 打赏
  • 举报
回复
你可以看一下 ,忘记说了服务器端也要支持 https://blog.csdn.net/luoyong123456/article/details/51306227
Vic 2018-05-18
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
如果你是在mvc的话,那么使用到额session命名空间就不一样了。
mvc中 controller 的session默认命名空间如下:

除非你在get和set时手动指定Session的命名空间。不然默认的不是System.Web.HttpContext.Current.

另外注意一下,controller和 apicontroller的session命名空间又是不一样,因此也要手动指定
我在set的时候全部手动指定的命名空间,如图
正怒月神 2018-05-18
  • 打赏
  • 举报
回复
如果你是在mvc的话,那么使用到额session命名空间就不一样了。
mvc中 controller 的session默认命名空间如下:

除非你在get和set时手动指定Session的命名空间。不然默认的不是System.Web.HttpContext.Current.

另外注意一下,controller和 apicontroller的session命名空间又是不一样,因此也要手动指定

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧