第三节 MemcachedProviders之SesstionStateProvider(关于Session的讨论)
- DefaultExpireTime 和 对象序列化存储
- SesstionStateProvider
<configuration>
<configSections>
<section name="cacheProvider" type="MemcachedProviders.Cache.CacheProviderSection, MemcachedProviders"
allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>
<sectionGroup name="enyim.com">
<section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<enyim.com>
<memcached>
<servers>
<!-- put your own server(s) here-->
<add address="127.0.0.1" port="11211" />
</servers>
<socketPool minPoolSize="10" maxPoolSize="100"
connectionTimeout="00:00:10" deadTimeout="00:02:00" />
</memcached>
</enyim.com>
<cacheProvider defaultProvider="MemcachedCacheProvider">
<providers>
<add name="MemcachedCacheProvider"
type="MemcachedProviders.Cache.MemcachedCacheProvider, MemcachedProviders" keySuffix="_MySuffix_" defaultExpireTime="2000"/>
</providers>
</cacheProvider>
<log4net>
<!-- Define some output appenders -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<!--<threshold value="OFF" />-->
<!-- Setup the root category, add the appenders and set the default priority -->
<root>
<priority value="WARN"/>
<appender-ref ref="ConsoleAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN"/>
<levelMax value="FATAL"/>
</filter>
</appender-ref>
</root>
</log4net>
</configuration>
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MemcachedProviders.Cache;
using MemcachedProviders.Session;
using System.Threading;
namespace DemoTest
{
class Program
{
static void Main(string[] args)
{
//服务端缓存通行证数据10秒
DistCache.DefaultExpireTime = 10000;
//假如用户登录成功
User user = new User();
user.Name = "小怜香";
user.Age = 20;
user.Birthday = Convert.ToDateTime("1991-1-1");
user.Sex = false;
user.IsLoginSucess = true;
//生成通过证
string passCode = Guid.NewGuid().ToString();
Console.WriteLine("首次缓存数据-------------------8秒后读取");
//缓存用户信息(10秒) ,并将PassCode保存到Cookie中
DistCache.Add(passCode, user, true);
//如何让用户在操作期间 缓存不过期呢?
Thread.Sleep(8000);
Console.WriteLine(DistCache.Get<User>(passCode).Name);
Console.WriteLine("重新缓存--------------9秒后再读取");
//从Cookie中获取PassCode ,通过PassCode从缓存中读取用户数据后重新缓存
//User newUser = DistCache.Get<User>(passCode);
//DistCache.Remove(passCode);
DistCache.Add(passCode, user, DistCache.DefaultExpireTime); //Set方式重新缓存 (MemcacheProvider封装不是很好)用第一方式设置还是Add
Thread.Sleep(8000); //如果上面的代码没有刷新缓存至10秒 那下面的代码肯定会超时
if(DistCache.Get<User>(passCode)!=null)
Console.WriteLine(DistCache.Get<User>(passCode).Name);
else
Console.WriteLine("因为没有操作,缓存未刷新,导致数据过期");
Console.WriteLine("3秒后再次读取数据----------");
Thread.Sleep(3000);
if (DistCache.Get<User>(passCode) != null)
Console.WriteLine(DistCache.Get<User>(passCode).Name);
else
Console.WriteLine("因为没有操作,缓存未刷新,导致数据过期");
//以上服务端的过程 即服务端用户登录数据先过期,PassCode取不到用户登录数据,可以判定为登录过期
//还有一种情况客户端Cookie先过期 导致无法取到PassCode,因此服务端就无法获取用户数据,可以判定为登录过期。
Console.ReadLine();
}
[Serializable]
public class User
{
public string Name { set; get; }
public bool Sex { set; get; }
public int Age { set; get; }
public DateTime Birthday { set; get; }
public bool IsLoginSucess { set; get; }
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MemcachedProviders.Cache;
using MemcachedProviders.Session;
using System.Threading;
namespace DemoTest
{
class Program
{
static void Main(string[] args)
{
//服务端缓存通行证数据10秒
DistCache.DefaultExpireTime = 10000;
//假如用户登录成功
User user = new User();
user.Name = "小怜香";
user.Age = 20;
user.Birthday = Convert.ToDateTime("1991-1-1");
user.Sex = false;
user.IsLoginSucess = true;
//生成通过证
string passCode = Guid.NewGuid().ToString();
Console.WriteLine("首次缓存数据-------------------9秒后读取");
//缓存用户信息(10秒) ,并将PassCode保存到Cookie中
DistCache.Add(passCode, user, true);
//如何让用户在操作期间 缓存不过期呢?当用户每一次操作或访问就刷新一下服务端的缓存
Thread.Sleep(9000);
Console.WriteLine(DistCache.Get<User>(passCode).Name);
Console.WriteLine("取出数据重新缓存--------------9秒后再读取");
//从Cookie中获取PassCode ,通过PassCode从缓存中读取用户数据后重新缓存
User newUser = DistCache.Get<User>(passCode);
DistCache.Remove(passCode);
DistCache.Add(passCode, newUser, true);
Thread.Sleep(9000); //如果上面的代码没有刷新缓存至10秒 那下面的代码肯定会超时
if(DistCache.Get<User>(passCode)!=null)
Console.WriteLine(DistCache.Get<User>(passCode).Name);
else
Console.WriteLine("因为没有操作,缓存未刷新,导致数据过期");
Console.WriteLine("持续11秒没有刷新操作,再次读取数据----------");
Thread.Sleep(2000);
if (DistCache.Get<User>(passCode) != null)
Console.WriteLine(DistCache.Get<User>(passCode).Name);
else
Console.WriteLine("因为没有操作,缓存未刷新,导致数据过期");
//以上服务端的过程 即服务端用户登录数据先过期,PassCode取不到用户登录数据,可以判定为登录过期
//还有一种情况客户端Cookie先过期 导致无法取到PassCode,因此服务端就无法获取用户数据,可以判定为登录过期。
Console.ReadLine();
}
[Serializable]
public class User
{
public string Name { set; get; }
public bool Sex { set; get; }
public int Age { set; get; }
public DateTime Birthday { set; get; }
public bool IsLoginSucess { set; get; }
}
}
}
<sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom"
customProvider="MemcachedSessionProvider">
<providers>
<add name="MemcachedSessionProvider"
type="MemcachedProviders.Session.SessionStateProvider,MemcachedProviders"
connectionStringName="SqlSessionServices" dbType="SQL" writeExceptionsToEventLog="false" />
</providers>
</sessionState>
</system.web>
<add name="SqlSessionServices" connectionString="Data Source= LIULJ2576\SQL2008;Initial Catalog = Session;User Id = sa;Password = sa;"/>
</connectionStrings>
sqlConnectionString="server=.;uid=sa;password=;initial catalog=sd"
cookieless="false"
timeout="20">
</sessionState>
转载于:https://www.cnblogs.com/aaa6818162/archive/2011/11/20/2255824.html
第三节 MemcachedProviders之SesstionStateProvider(关于Session的讨论)相关推荐
- 【kafka】关于Kafka Fetch Session的讨论
1.概述 转载:关于Kafka Fetch Session的讨论 Kafka在1.1.0版本引入了fetch session的概念,旨在降低"无效"FETCH请求对集群带宽资源的占 ...
- 【Python】SQLAlchemy:session何时commit,何时close?
SQLAlchemy:session何时commit,何时close? 参考阅读:SQLAlchemy - 官方文档 官方文档说明了关于什么是session,以及如何创建session.如何使用ses ...
- 2019尚硅谷大数据Javaweb篇三 Ajax、JSTL、会话技术、过滤器、监听器、xml、json
2019尚硅谷大数据 Javaweb篇三Ajax.JSTL.会话技术.过滤器.监听器 tags: 大数据 2019尚学堂 categories: Ajax异步请求 JSTL中的if和forEach 会 ...
- cookie被淘汰_session正在被淘汰吗?
网上有很多关于 session 的讨论,不过在我看来许多都把 session 狭义化了 http 无状态,所以为了实现有状态 http,才有了会话(session)的概念.说实话,网上很多关于会话的讨 ...
- 敏捷领导力系列介绍--全景领导力LCP的学习心得
每年我都会给自己定义一个学习目标和主题,腾出时间和专项预算来升级自己:只有成为一个持续的学习者,才有可能保持自己是一位优秀的讲师和咨询师,在业界立于不败之地. 今年我选择了TLC(The Leader ...
- ALSA (高级Linux声音架构)、ASOC基础知识
目录 第一节:什么是ALSA和ASOC 第二节:ALSA框架 第三节:ALSA的使用 第四节:ASOC的硬件框架 第四节:ASOC的软件框架 第一节:什么是ALSA和ASOC ALSA是Advance ...
- 2022面试200题目和答案分布式+微服务+MYSQL+Redis+JVM+Spring
200题目和答案分布式+微服务+MYSQL+Redis+JVM+Spring等等 带图MD在资源https://download.csdn.net/download/m0_47987937/86509 ...
- LWN:机器学习模型的偏见和伦理问题
点击上方蓝色"Linux News搬运工"关注我们~ Bias and ethical issues in machine-learning models September 2, ...
- OpenStack Summit Vancouver 会议纪要
我主要在温哥华峰会关注了Design Summit Operator Track的内容,纪录了整个会议各类相关主题的讨论, 有一些是我参与的,有一些的翻译的会议纪要(难免有理解错误和疏漏,请多包涵). ...
最新文章
- SpringBoot2.x整合Redis实战 4节课
- 【NetApp】ROOT VOLUME NOT WORKING PROPERLY: RECOVERY REQUIRED
- C程序运用递归求阶乘
- MongoDB 初学
- [2020-ECCV]PIPAL-a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration论文简析
- python百度翻译爬虫_Python爬虫教程-05-python爬虫实现百度翻译
- SpringBoot-07:SpringBoot整合PageHelper做多条件分页查询
- 敏捷开发免费管理工具——火星人预览之三:迭代,计划会,分配
- kafka最好用的脚本一:kafka-topic
- processing初识
- 精进Spring—Spring常用注解【经典总结】
- 书法教室及数字化音乐教室建设方案
- 联想服务器修改mac,修改Thinkpad E420的无线网卡MAC地址?
- C++开源库列表总结记录
- 超声波传感器(CHx01) 学习笔记 Ⅳ- 程序移植
- C语言学习之请编程序将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。
- Device /dev/ttyS? is locked.
- 为什么我要现在复习学习数据结构和算法
- 10计算机管理员权限获得,Win10永久获取管理员权限的方法
- Web前端大作业—个人网页(html+css+javascript)
热门文章
- java无法编译_Java静态方法无法编译
- trycatch抛出异常_Java生鲜电商平台架构中,如何统一异常处理及架构实战
- 自学了python基础英语_Python自学路线图之Python基础自学
- php编译7教程,LANMP系列教程之php编译安装CentOS7环境
- python保存图片到指定路径_python将处理好的图像保存到指定目录下的方法
- suse linux c 编译环境,SUSE 11中安装GCC开发环境
- matlab 电磁兼容仿真软件,EMC Studio免费版
- 如何通过 DJI SDK 控制无人机运动
- conda环境里安装pydot
- Exchange 2010和Exchange 2016共存部署-10:配置多域名证书