1.什么是Session?

Session即会话,是指一个用户在一段时间内对某一个站点的一次访问。  
Session对象在.NET中对应HttpSessionState类,表示“会话状态”,可以保存与当前用户会话相关的信息。 
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息。用户在应用程序的页面切换时,Session对象的变量不会被清除。
ASP.NET页面是"无状态"的,这意味着每次向服务器发送一个请求,服务器都会生成一个该页面的实例。但有时候,我们希望在不同的页面之间共享信息,比如购物车、用户登录等,于是,ASP.NET为我们提供了一个服务端的Session机制。
对于一个Web应用程序而言,所有用户访问到的Application对象的内容是完全一样的;而不同用户会话访问到的Session对象的内容则各不相同。  Session可以保存变量,该变量只能供一个用户使用,也就是说,每一个网页浏览者都有自己的Session对象变量,即Session对象具有唯一性。 
出处:https://blog.csdn.net/lu930124/article/details/43227531

在ASP.NET中,Session只存在于action中,在controller构造函数中获取Session是行不通的。

2. Session是如何工作的?-工作机制;工作流程;

服务端的Session机制是基于客户端的,也就是说服务端的Session会保存每个客户端的信息到服务端内存中。具体过程是这样的:
→客户端向服务端发出请求
→服务端响应客户端,并针对该客户端创建Session和唯一的Session ID
→把Session ID作为key, Session内容作为value,以键值对形式存储到Session State Provider中
→客户端带着专属的Session ID再次向服务端请求
→服务端的Session机制根据客户端的Session ID,从Session State Provider中取出内容返回给客户端
出处:https://blog.csdn.net/mss359681091/article/details/80461237

3.如何使用Session?

1.在Web.config设置相关参数

<system.web>
<sessionState mode="InProc" timeout="30" />
</system.web>
//inProc模式(缺省模式): 表明会话状态要由ASP.NET存储到内存中,
//而且不用Cookie来传递会话ID。:https://zhidao.baidu.com/question/441754355.html
//其他模式:https://blog.csdn.net/mss359681091/article/details/80461237
//timeout="30";;;30分钟有效期//cookieless="false";;也可以从后台代码中进行配置:Session.TimeOut=30;

也可以从后台代码中进行配置:Session.TimeOut=30;

在Asp.net中,可以有四处设置Session的过期时间:https://www.cnblogs.com/ingstyle/p/5711366.html

2.session的存取

  (1)将新的项添加到会话状态中语法格式为: 
            Session ("键名") = 值 
            或者 
            Session.Add( "键名" , 值) 
      (2)按名称获取会话状态中的值语法格式为: 
            变量 = Session ("键名")  
            或者 
           变量 = Session.Item("键名") 
      (3)删除会话状态集合中的项语法格式为: 
             Session.Remove("键名") 
      (4)清除会话状态中的所有值语法格式为: 
             Session.RemoveAll() 
            或者 
             Session.Clear() 
      (5)取消当前会话语法格式为: 
             Session.Abandon() 
      (6)设置会话状态的超时期限,以分钟为单位。 语法格式为: 
             Session.TimeOut = 数值 
            Global.asax 文件中有2个事件应用于Session对象  
            事件名称 说明 
            Session_Start 在会话启动时激发 
            Session_End 在会话结束时激发

3.session-Start-End事件

在ASP.NET中有两个可以使用的Session事件:
Session_Start
Session_End
能处理应用中的这两个事件在global.asax这个文件里,当一个新的Session开启时session_start事件被触发,当Session被回收或是过期时Session_End被触发: void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
}
void Session_End(object sender, EventArgs e){
// Code that runs when a session ends.
}

Ps:
实战博客文章
1:https://blog.csdn.net/weixin_30750335/article/details/95563914
2:https://www.cnblogs.com/KKSoft/p/7242469.html

练习:

1.会话全局之.cshtml

<body>
//直接显示在页面@@@@@@@@
@Session["test"];
</body>
或者运算
@if (Session["test23"] != null) { Response.Write("9898989898"); };

2.会话全局之不同controller

var controller_test = Session["test"];测试不同controller之间session传值;;;ok

3.会话全局之过滤器使用session

HttpContext.Current.Session["UserID"] = "8686";在过滤器中使用session

4.cshtml页面使用session

 <script>

注意:list集合不可session传值,需将那些值“变成”(序列化或干脆for循环)成string类型传到前台在substring与split分割成数组!!!!!
var cmenu= "@Session["cmenu"]"; var test= cmenu.substring(0,cmenu.length-1).split(","); </script>

5.普通类中使用session


View_UserAndDepartAndOfficeAndRole user = (View_UserAndDepartAndOfficeAndRole)HttpContext.Current.Session["user"];
namespace JJQ2.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public JsonResult Select()
{ Debug.WriteLine("555555555555555555555555555555555555555555555555555555555"); Response.Write("登录失败");
Session["test"] = "686868";
Session["test"] = "686868";
Session["test"] = "6666";
Session["test1"] = "686868";
Session["test2"] = "686868";
Session["test3"] = "686868";
string ok = "lll";
Debug.WriteLine(Session["test"]);
Debug.WriteLine(Session.Count);
Debug.WriteLine(Session);
//Session.RemoveAll();
//Response.Redirect("aa/Index");
if (Session != null)
{
Debug.WriteLine("55999999999999999999555"); } var Jsonlist = library.GetList().ToList();//全查 return Json(Jsonlist);
}

MVC-Session的更多相关文章

  1. [转]菜鸟程序员之Asp.net MVC Session过期异常的处理

    本文转自:http://www.cnblogs.com/JustRun1983/p/3377652.html 小赵是刚毕业的计算机专业方面的大学生,4年的大学时间里面,他读过了很多编程方面的数据,也动 ...

  2. 菜鸟程序员之Asp.net MVC Session过期异常的处理

    小赵是刚毕业的计算机专业方面的大学生,4年的大学时间里面,他读过了很多编程方面的数据,也动手也了很多代码.现在毕业了,他如愿的加入了T公司,开始了自己的程序员生涯.他信心满满,相信自己4年的学习到的东 ...

  3. MVC session过期如何处理跳转

    以前我们总是会写一个基类也叫父类来判断session是否已过期然后跳转到指定的错误页面或者登陆界面,然后让所有的页面都继承这个基类,但是当我们应用到MVC项目中时,发现该方法并不会起作用.这时我们可以 ...

  4. Spring Mvc session拦截器实现

    Spring Mvc拦截器实现session过期跳转到登录页面 配置拦截器 <mvc:interceptors> <mvc:interceptor> <mvc:mappi ...

  5. ASP.NET MVC Session 过期验证跳转至登入页面

    一.在要检查登入的控制器上继承 CheckLoginController 类 2. CheckLoginController 类的写法 using System; using System.Colle ...

  6. .net mvc session失效问题

    最近解决基于.net mvc项目的session失效问题,这个跟大家聊聊. 1.问题分析 .net mvc中,Session失效需要考虑几种情况: 基于权限认证的Action,使用非Ajax请求: 基 ...

  7. Ajax异步请求阻塞情况的解决办法(asp.net MVC Session锁的问题)

    讨论今天这个问题之前,我们先来看下浏览器公布的资源并发数限制个数,如下图 不难看出,目前主流浏览器支持都是最多6个并发 需要注意的是,浏览器的并发请求数目限制是针对同一域名的 意即,同一时间针对同一域 ...

  8. asp.net mvc session锁问题

    一.会话状态Session Session用于服务器端状态管理,使用Session之后,每个客户端都可以将实际的数据保存在服务器上,对于每个客户端的数据,将会生成一个对应的唯一的key(保存在客户端) ...

  9. Asp.net MVC Session过期异常的处理

    一.使用MVC中的Filter来对Session进行验证 (1)方法1: public class MyAuthorizeAttribute : FilterAttribute, IAuthoriza ...

  10. asp.net mvc Session RedisSessionStateProvider锁的实现

    最近项目用到了RedisSessionStateProvider来保存session,发现比内存session慢,后来慢慢了解,发现asp.net session是有锁的.我在文章 你的项目真的需要S ...

随机推荐

  1. 【linux】gitlab 的安装以及数据迁移

    一 .安装; 1  下载相应版本rpm包并安装 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ wget https://mirrors ...

  2. CA认证以及https的实现

    (1).CA认证 CA全称Certificate Authority,通常翻译成认证权威或者认证中心,主要用途是为用户发放数字证书.认证中心(CA)的功能:证书发放.证书更新.证书撤销和证书验证.CA ...

  3. Swift4.0复习整数,浮点数,布尔值

    1.类型相互转换: Int(a) Float(b) let a = Bool(truncating: NSNumber(value: c)) 2.元组: let tuple: (Int, String ...

  4. bert论文笔记

    摘要 BERT是“Bidirectional Encoder Representations from Transformers"的简称,代表来自Transformer的双向编码表示.不同于 ...

  5. 管道式编程(Pipeline Style programming)

    受 F# 中的管道运算符和 C# 中的 LINQ 语法,管道式编程为 C# 提供了更加灵活性的功能性编程.通过使用 扩展函数 可以将多个功能连接起来构建成一个管道. 前言 在 C# 编程中,管道式编程 ...

  6. confluence6.14.1linux安装破解

    一.简介 Confluence为团队提供一个协作环境.在这里,团队成员齐心协力,各擅其能,协同地编写文档和管理项目.从此打破不同团队.不同部门以及个人之间信息孤岛的僵局,Confluence真正实现了 ...

  7. juc-locks包

    1. 简介 java.util.concurrent.locks 包含常用的锁实现,重点研究AbstractQueuedSynchronizer.ReentrantLock.ReentrantRead ...

  8. Duration和Period的区别--通俗易懂

    在jdk1.8以后,对表示日期时间的类型进行了重新分类,这里出现了2个新的类,Duraction 和Period Duraction表示:时间的区间,用来度量秒和纳秒之间的时间值 Period表示:一 ...

  9. 关于/etc/rc.local

    /etc/rc.d/rc.local 用于添加开机启动命令 /etc/rc.local是/etc/rc.d/rc.local的软连接 简单来说 开机自启的

  10. Java中的事务及使用

    什么是事务? 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言(如S ...