基于Redis缓存的Session共享(附源码)

在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion共享用的最多的应该是SQLServer数据库实现,我之前参与的一个项目么么亲子社区就是用的SQLSERVER实现不同子域名之间的Session共享。先打个广告嘿嘿,么么亲子网:enmuo.comi.enmuo.com就是通过SQLSERVER实现Session共享 欢迎大家访问。

该片文章主要介绍主域名跟不同子域名之间的Session信息共享。

纠正上一篇文章中关于RredisHelper类中的一个错误,就是要把设置缓存过期时间的代码放在设置完缓存值的后面,要不当第一次给该缓存键赋值的时候设置的缓存时间不管用,这个我也不知道为真么,具体修改如下:

 

下面我们开始进入正题,首先介绍一下CookieSession的关系

我们都知道Session是存在Server端,Cookie是存在用户浏览器本地或内存中,用户在发起一个HTTP请求时,在请求的Header中会有Cookie信息,而Cookie中有一个ASP.NET_Sessionid的值,我们就是通过这个值获取到服务器端对应的Session信息。如下图所示:

说明:图片中的token值是我的另一篇博文中用到的,本篇文章中不涉及该值。

下面介绍一下我的思路

  1. 用户在给Session赋值的操作的时候我们可以为用户生成一个唯一的cookie值作为sessionID存储在用户的客户端,该cookie的key值可以自己命名,将该cookie值作为缓存的键和Session值一起存入到Redis缓存中。当然我们也可以直接用cookie中ASP.NET_Sessionid的值。
  2. 用户使用Session值得时候就可以根据cookie中的sessionId值在缓存中取出数据即可。

程序实现逻辑:

1、  我们新建一个如下项目,只用关注红线圈住的,其他没有用

  • CookieHelper.cs Cookie操作,主要获取或生成SessionID值
  • RredisHelper.cs 缓存操作,详见上一篇博文
  • SessionHelper.cs 封装的Session操作

2、  CookieHelper.cs文件

在该文件中我们首先定义一个常量const string RedisSessionCookiesId = "RedisSessionCookiesId";作为cookie中存储SessionId的健。我们用Guid.NewGuid()

生成一个唯一的值存储在cookie中作为SessionId的值,我们给cookie的Domain属性复制 "session.com",作为共享cookie的顶级域名。

具体代码如下:

3、  RredisHelper.cs文件不做介绍,详见:http://www.cnblogs.com/lc-chenlong/archive/2013/07/26/3218157.html

4、 SessionHelper.cs 文件

通过索引器实现Session[“XX”]的取值赋值操作。对索引器不了解的童鞋可以百度一下。

因为在一个项目中我们可以定义很多Session,比如Session[“name”]、Session[“url”]等,然而SessionID却只有一个值,那么我们怎么区分这些Session值呢,我们可以用SessionID+”_”+Session索引值实现,如:SessionID+”_name”、 SessionID+”_url”。

  代码如下:

对Session共享测试

1、新建两个web项目

2、我们在WebForm1.aspx.cs中添加如下代码:

3、在Default.aspx中添加如下代码:

4、我在IIS想新建了两个项目:session.com(对应WebForm1.aspx项目)和b.session.com(对应Default.aspx项目)

5、运行session.com下过如下:

6、运行 b.session.com,我们发现我们获取到session.com站点的session值

7、b.session.com在文本框中输入”陈龙”并点击【改变Session[user] 值】按钮。如下图:

8、刷新session.com发现session[‘user’]的值已经改变,而且过期时间也被刷新。

9、等到session.com 页面session[‘url’]的过期时间为0时刷新b.session.com

说明Session值已过期。

整个例子已经写完,如果文中有说的不对的地方欢迎指正。

点击下载源码

每天学习一点点,每天进步一点点。

 
 
 
标签: RedisSession共享

基于Redis缓存的Session共享(附源码)的更多相关文章

  1. 基于Redis缓存的Session共享测试(转)

    本机ip为192.168.1.101 1.准备测试环境 两个Tomcat 在Eclipse中新建2个Servers,指定对应的Tomcat,端口号错开. Tomcat1(18005.18080.180 ...

  2. 一文详解如何用 TensorFlow 实现基于 LSTM 的文本分类(附源码)

    雷锋网按:本文作者陆池,原文载于作者个人博客,雷锋网已获授权. 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用 ...

  3. 基于jQuery左右滑动切换特效 附源码

    分享一款基于脚jQuery左右滑动切换特效.这是一款鼠标点击左右箭头按钮图片滚动切换,鼠标移到图片上显示透明边框特效.   效果图如下:   废话不多说,代码奉上!   html代码: <div ...

  4. 一个基于jQuery写的弹窗效果(附源码)

    最近项目中频繁遇到需要弹出窗口的功能,一直使用浏览器默认的Alert和Confirm弹窗,感觉视觉效果不是那么好,而从网上下载的话又找不到合适的,找到的话有些也是十分臃肿,有时候感觉学习配置的功夫自己 ...

  5. 基于S2SH开发学生考勤管理系统 附源码

    开发环境: Windows操作系统开发工具:Eclipse+Jdk+Tomcat+mysql数据库 运行效果图 源码及原文链接:http://javadao.xyz/forum.php?mod=vie ...

  6. 基于SSH开发银行个人业务管理系统 附源码

    开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySql数据库 运行效果图

  7. (干货)基于 veImageX 搭建海报生成平台 -- 附源码

    前言 618 年中促销即将来临,很多公司都会通过海报来宣传自己的促销方案,通常情况下海报由设计团队基于 PS.Sketch 等工具创作,后期若想替换海报文案.商品列表等内容则需打开原工程进行二次创作, ...

  8. .NET基于Redis缓存实现单点登录SSO的解决方案[转]

    一.基本概念 最近公司的多个业务系统要统一整合使用同一个登录,这就是我们耳熟能详的单点登录,现在就NET基于Redis缓存实现单点登录做一个简单的分享. 单点登录(Single Sign On),简称 ...

  9. .NET基于Redis缓存实现单点登录SSO的解决方案

    一.基本概念 最近公司的多个业务系统要统一整合使用同一个登录,这就是我们耳熟能详的单点登录,现在就NET基于Redis缓存实现单点登录做一个简单的分享. 单点登录(Single Sign On),简称 ...

随机推荐

  1. Socket 学习(三)

    前2节,说的是 Server 与 Client 的数据交互.服务端IP.端口固定,客户端 网服务端发送消息的时候,他的Socket对面被服务端获取到了,而且链接没有中断,他当然可以很容易回复信息. 现 ...

  2. Codeforces 437D The Child and Zoo(贪心+并查集)

    题目链接:Codeforces 437D The Child and Zoo 题目大意:小孩子去參观动物园,动物园分非常多个区,每一个区有若干种动物,拥有的动物种数作为该区的权值.然后有m条路,每条路 ...

  3. jQuery 添加 删除 改动select option

    jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selec ...

  4. Oracle SQL in 超过1000 的解决方案

    处理 Oracle SQL in 超过1000 的解决方案 处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超过1000项 ...

  5. hdu149850 years, 50 colors (多个最小顶点覆盖)

    50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  6. POJ3233(矩阵二分再二分)

    题目非常有简单: Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + ...

  7. C# ASP.NET CSV文件导入数据库

    原文:C# ASP.NET CSV文件导入数据库 using System; using System.Collections.Generic; using System.Text; using Sy ...

  8. 思维方式--SMART原则

    假设你的项目管理.系统架构的兴趣,请加微信订阅号"softjg",收藏此PM.建筑师的家 万事开头于你目标的设定,假设開始走错了,那么后面的路将会更加的错误.甚至于更加的努力犯错就 ...

  9. 自动编译CoffeeScript的Gruntfile.js

    比如把coffee文件写在coffee/controller/文件夹下,新建js/controller文件夹,使用grunt运行项目,将自动编译coffee到相应的js文件夹下. module.exp ...

  10. PHP 17: MySQL的简单介绍

    原文:PHP 17: MySQL的简单介绍 这一章将简单介绍MySQL的基本知识. 本文来自http://lib.hackbase.com/html/8/35125.htm. MySQL是最受欢迎的开 ...