控制器-〉方法过滤器-〉controller-> 方法

所以通过建立controller基类的方法进行方法过滤,所有控制器先执行基类的OnActionExecuting 方法。

using Spring.Context;
using Spring.Context.Support;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace Eco.Web.App.Controllers
{
public class BaseController : Controller
{
//
// GET: /Base/
public UserInfo LoginUser { get; set; }
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
bool isExt = false;
// if (Session["userInfo"] == null)
if (Request.Cookies["sessionId"]!=null)
{
string sessionId = Request.Cookies["sessionId"].Value;//接收从Cookie中传递过来的Memcache的key
object obj= Common.MemcacheHelper.Get(sessionId);//根据key从Memcache中获取用户的信息
if (obj != null)
{
UserInfo userInfo = Common.SerializerHelper.DeserializeToObject<UserInfo>(obj.ToString());
LoginUser = userInfo;
isExt = true;
//Common.MemcacheHelper.Set(sessionId, obj.ToString(), DateTime.Now.AddMinutes(20));//模拟滑动过期时间
if (LoginUser.UName == "itcast")
{
return;
} //完成权限过滤.
string actionUrl = Request.Url.AbsolutePath.ToLower();//请求地址。
string actionHttpMethod = Request.HttpMethod;//请求方式
IApplicationContext ctx = ContextRegistry.GetContext();
IUserInfoService UserInfoService = (IUserInfoService)ctx.GetObject("UserInfoService");
IActionInfoService ActionInfoService = (IActionInfoService)ctx.GetObject("ActionInfoService");
var actionInfo= ActionInfoService.LoadEntities(a=>a.Url==actionUrl&&a.HttpMethod==actionHttpMethod).FirstOrDefault();
if (actionInfo == null)
{
Response.Redirect("/Error.html");
return;
} //判断登录用是否有权限访问
//按照第2条进行判断
var loginUserInfo = UserInfoService.LoadEntities(u => u.ID == LoginUser.ID).FirstOrDefault();
var r_UserInfo_actionInfo =( from a in loginUserInfo.R_UserInfo_ActionInfo
where a.ActionInfoID == actionInfo.ID
select a).FirstOrDefault();
if (r_UserInfo_actionInfo != null)
{
if (r_UserInfo_actionInfo.IsPass == true)
{
return;
}
else
{
Response.Redirect("/Error.html");
return;
}
}
//按照第1条线进行过滤(用户---角色--权限)
var loginUserRoleInfo = loginUserInfo.RoleInfo;
var loginUserCountAction=(from r in loginUserRoleInfo
from a in r.ActionInfo
where a.ID==actionInfo.ID
select a
).Count();
if (loginUserCountAction < )
{
Response.Redirect("/Error.html");
return;
} } }
if (!isExt)
{
filterContext.HttpContext.Response.Redirect("/Login/Index");
return;
} } }
}

controller基类

http://www.cnblogs.com/jaxu/p/5196811.html  memcache  http://www.cnblogs.com/knowledgesea/p/4940713.html

客户端添加

Commons.dll、ICSharpCode.SharpZipLib.dll、Memcached.ClientLibrary.dll引用

建立memcacheHelper辅助类

将地址写到Web.config文件中

string[] serverlist = { "127.0.0.1:11211", "10.0.0.132:11211" };

建立序列化(JSON)SerializerHelper类,缓存对象.用json.net开源项目序列化对象  VS已经集成到MVC中,不用在MVC项目中引入包,但在非MVC项目中需要引入包(在MVC packages中找),如COMMON项目中要引入

通过向Cookies存入sessionId 来存、取session,只要浏览器不关闭就可以取出

string sessionId =Guid.NewGuid().ToString();//作为Memcache的key
Common.MemcacheHelper.Set(sessionId,Common.SerializerHelper.SerializeToString(userInfo), DateTime.Now.AddMinutes(20));//使用Memcache代替Session解决数据在不同Web服务器之间共享的问题。
Response.Cookies["sessionId"].Value = sessionId;//将Memcache的key以cookie的形式返回到浏览器端的内存中,当用户再次请求其它的页面请求报文中会以Cookie将该值再次发送服务端。

....................

if (Request.Cookies["sessionId"]!=null)
{
string sessionId = Request.Cookies["sessionId"].Value;//接收从Cookie中传递过来的Memcache的key
object obj= Common.MemcacheHelper.Get(sessionId);//根据key从Memcache中获取用户的信息

-------------------------------------------------------------------------------------------------------------------------------------

方法过滤器,分布式缓存 Memcached实现Session解决方案的更多相关文章

  1. CYQ.Data V5 分布式缓存MemCached应用开发介绍

    前言 今天大伙还在热议关于.NET Core的东西,我只想说一句:在.NET 跨平台叫了这么多年间,其实人们期待的是一个知名的跨平台案例,而不是一堆能跨平台的消息. 好,回头说说框架: 在框架完成数据 ...

  2. 分布式缓存Memcached/memcached/memcache详解及区别

    先来解释下标题中的三种写法:首字母大写的Memcached,指的是Memcached服务器,就是独立运行Memcached的后台服务器,用于存储缓存数据的“容器”.memcached和memcache ...

  3. .NET分布式缓存Memcached从入门到实战

    一.课程介绍 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是 ...

  4. NET分布式缓存Memcached测试体验

    原文地址:http://onlyonewt.blog.sohu.com/160168896.html 一直在学习关注大访问量网站的缓存是如何实现,之前看过Memcached的资料,忙于没有时间来真正测 ...

  5. 第八章 企业项目开发--分布式缓存memcached

    注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存 ...

  6. 分布式缓存Memcached

       分布式缓存服务器,既然用到数据缓存很明显就是想高效性的获取数据,大容量的存储数据.为了可以缓存大量的数据以及可以高效获取数据,那么分布式缓存数据库就要解决数据可以水平线性扩展,这样可以扩大数据容 ...

  7. 分布式缓存-Memcached

    分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大 并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性).分布式缓存的核心技术包括首先是内存本身的管理问题,包括 ...

  8. C# Azure 存储-分布式缓存Redis在session中的配置

    1. 开始 对于分布式的缓存,平常的session的处理是一个用户对应一台分布式的机器,如果这台机器中途挂机或者不能处理这个用户session的情况发生,则此用户的session会丢失,会发生不可预知 ...

  9. 分布式缓存memcached介绍,win7环境安装,常用命令set,get,delete,stats, java访问

    一.memcached是什么? 二.memcached不互相通信的分布式 三.安装步骤 四.本文介绍的命令主要包括: 存入命令(Storage commands) 取回命令(Retrieval com ...

随机推荐

  1. Jquery用法

    $this.closest("dd").addClass("selected").siblings().removeClass("selected&q ...

  2. 【android design】android常用设计资源

    一.概述 大部分程序员擅长开发,但是对于设计却知之甚少.这直接导致,程序员在初期开发出来的应用(大多为兴趣或实用导向)中看不中用.因此,有必要搜集整合一些设计资源,这样既能减轻程序员在设计上所耗费的时 ...

  3. CSS样式表 选择器

    1.内联样式表 和HTML联合显示,控制精确,但是可重用性差,冗余较多. 例:<p style="font-size:14px;">内联样式表</p> &l ...

  4. android-ImageView及其子类

    一.知识概要 ImageView继承自View,能显示任何Drawable对象; ImageView支持的常用XML属性及相关方法: android:adjustViewBounds    设置Ima ...

  5. House Robber

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  6. ZK 父窗口与子窗口消息交互

    父窗口代码: 前台(test.zul) <?page title="" contentType="text/html;charset=UTF-8"?> ...

  7. 搭建vpn

    之前买的vpn,对linux支持很不友好,家里装的又是ubuntu.突然一想自己买个vps搭个vpn. 先买了host1plus的vps,一个月30块,配了两天,pptp,l2tp,shadow so ...

  8. 【转】jquery iframe取得元素与自适应高度

    今天没事来总结一下iframe在jquery中怎么操作的,下面我来给各位介绍jquery 获取iframe子/父页面的元素及iframe在jquery高度自适应实现方法,各位朋友可参考. jquery ...

  9. BizTalk开发系列(二十三) BizTalk性能指标参考

    BizTalk项目目前比较少,使用的客户也不多.大多只知道BizTalk是一个不错的产品,是Microsoft SOA平台的核心产品,不过还没有将其应用到生产环境.还有一些客户对BizTalk的性能不 ...

  10. [转]RamDisk导致远程桌面客户端无法启动问题

    在一次重启系统后发现无法运行远程桌面客户端,运行后进行连接即报错. 查看日志有AppCrash错误: 错误应用程序名称: mstsc.exe,版本: 6.1.7600.16385,时间戳: 0x4a5 ...