MVC在基控制器中实现处理Session的逻辑
当需要跨页面共享信息的时候,Session是首当其冲的选择,最典型的例子就是:在处理登录和购物车逻辑的时候需要用到Session。在MVC中,可以把处理Session的逻辑放在一个泛型基控制器中,但需要注意的是:在判断没有登录就跳转到登录页的时候,需要把出错控制器和登录控制器排除在外。
using System.Collections.Generic; using System.Web.Mvc; using System.Web.Routing;namespace MvcApplication1.Controllers {public class BaseController<TModel> : Controller{private const string loginSession = "LoginSession";private const string shoppingCartSession = "ShoppingCartSession";private const string errorController = "Error";private const string LoginController = "Login";private const string LoginAction = "Login";//没有登录的跳转到登录页protected override void Initialize(RequestContext requestContext){base.Initialize(requestContext);//如果没有登录,且不是出错和登录控制器就跳转到登录页if (!NoNeedSessionController(requestContext) && !HasLoginSession()){GoToAction(requestContext, Url.Action(LoginAction, LoginController));}}//对哪些不需要依赖缓存的控制器 返回trueprivate bool NoNeedSessionController(RequestContext requestContext){//从路由数据中取到当前controller的名称var c = requestContext.RouteData.Values["controller"].ToString().ToLower();//把不需要依赖Session的控制器名称放到列表中var noNeedSessionList = new List<string>{errorController.ToLower(),LoginController.ToLower()};return noNeedSessionList.Contains(c);}//跳转到某个视图private void GoToAction(RequestContext requestContext, string action){requestContext.HttpContext.Response.Clear();requestContext.HttpContext.Response.Redirect(action);requestContext.HttpContext.Response.End();}//登录的时候判断是否有Sessionprotected bool HasLoginSession(){return Session[loginSession] != null;}//判断购物车是否有Sessionprotected bool HasShoppingCartSession(){return Session[shoppingCartSession] != null;}//从Session中获取登录模型的实例protected TModel GetLoginModelFromSession(){return (TModel)this.Session[loginSession];}//从Session中获取购物车模型的实例protected TModel GetShoppingCartModelFromSession(){return (TModel)this.Session[shoppingCartSession];}//设置登录Sessionprotected void SetLoginSession(TModel loginModel){Session[loginSession] = loginModel;}//设置购物车Sessionprotected void SetShoppingCartSession(TModel shoppingCartModel){Session[shoppingCartSession] = shoppingCartModel;}//让登录Session失效protected void AbandonLoginSession(){if (HasLoginSession()){Session.Abandon();}}//让购物车Session失效protected void AbandonShoppingCartSession(){if (HasShoppingCartSession()){Session.Abandon();}}} }
让其他控制器派生于基控制器:
using System.Web.Mvc; using MvcApplication1.Models;namespace MvcApplication1.Controllers {public class LoginController : BaseController<LoginModel>{public ActionResult Index(){//把登录模型实例保存到Session中LoginModel loginModel = new LoginModel();SetLoginSession(loginModel);//从Session中获取登录模型实例LoginModel sessioModel = GetLoginModelFromSession();//使登录Session失效 AbandonLoginSession();return View();}} }
MVC在基控制器中实现处理Session的逻辑相关推荐
- asp.net MVC控制器中返回JSON格式的数据时提示下载
Asp.net mvc在接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("# ...
- php中的控制器是什么意思,理解PHP中的MVC编程之控制器_php
简单来讲,控制器的作用就是接受请求.它使用获取的方法,在这里是通过URI,载入一个功能模块来刷新或者提交一个表述层.控制器将使用$_GET自动全局变量来判断载入哪一个模块. 一个请求的例子,看起来像这 ...
- mvc 两个控制器session 丢失_用纯 JavaScript 撸一个 MVC 程序
前言 我想用 model-view-controller 架构模式在纯 JavaScript 中写一个简单的程序,于是我这样做了.希望它可以帮你理解 MVC,因为当你刚开始接触它时,它是一个难以理解的 ...
- MVC控制器中动作方法返回的结果
在MVC控制器中主要的返回方式有如下几种: 1.Content(): 返回文本类型的ContentResult,比如"这是我做的一个MVC". 2.File(): 返回文件类型的内 ...
- mvc 调用其他控制器方法session丢失_Java从入门到放弃;MVC 模式
MVC 模式 MVC 模式是一种软件框架模式,被广泛应用在 JavaEE 项目的开发中.MVC 模式很好理解,但也十分重要,在今后的 Web 应用开发中,我们都离不开它. 之前,我们学习过了 Serv ...
- ASP .NET Core MVC 控制器中获取当前登录用户
微软提供了 身份验证:Microsoft.AspNet.Identity 如果想要在控制器中获取当前登录的用户,如下代码: var userId = this.User.FindFirstValue( ...
- 在spring MVC项目中集成Spring session redis (使用spring session框架,redis作为存储缓存)...
2019独角兽企业重金招聘Python工程师标准>>> 1.为项目增加以来 pom.xml中使用 <!-- spring session 单点登录 --> //本项目使 ...
- 在Spring MVC Web应用程序中添加社交登录:单元测试
Spring Social 1.0具有spring-social-test模块,该模块为测试Connect实现和API绑定提供支持. 该模块已从Spring Social 1.1.0中删除,并由 Sp ...
- 如何使用recaptcha_在Spring MVC Web应用程序中使用reCaptcha
如何使用recaptcha CAPTCHA是一个程序,可以生成人类可以通过但计算机程序" 不能 "通过的测试并对其进行评分. 所采取的策略之一是向用户显示具有扭曲文本的图像,并且用 ...
最新文章
- elasticsearch 分片_Elasticsearch最佳实践之分片使用优化
- 2021第一融!第四范式完成D轮7亿美元融资
- 监听端口的非阻塞性不具有继承性
- 使用R进行相关性分析
- 岳阳学计算机软件,岳阳学java专业学校排名
- element-ui upload组件 上传文件类型限制
- Ubuntu 手动更新firefox的flash插件
- 候选公示!高工智能汽车金球奖第二批入围年度产品/方案亮相
- ABB ACS 510 1.5-5.5kw驱动板图纸 PDF格式
- SpringMVC---- SpringMVC返回JSON数据
- 2020读书笔记 《马歇尔传记》
- python scrapy框架 抓取的图片路径打不开图片_Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码...
- 11 | 向埃隆·马斯克学习任务分解
- 服务器断电mysql文件丢失_服务器断电了怎么恢复数据?
- Java学习笔记【10】常用类 - - Math类、Random类及随机数详解
- python中 glob.glob
- matlab如何在极坐标绘图,Matlab在极坐标中绘图
- windows7安装打印机提示“本地打印后台处理程序服务没有运行”
- 77.Oozie的HA启用
- android studio各个资源文件夹以及作用备注