基类中SESSION与COOKIE双重用户身份验证
网站中使用SESSION或COOKIE来进行用户身份验证是必要的事情,常用的做法便是写一个基类,所有需要用到身份验证的页面统统继承这个页面,由于之前使用的是COOKIE,这次加入了SESSION,两者一起来进行判断,出问题了,什么问题呢?听我慢慢道来!
首先跟大家讲讲关于SESSION与COOKIE的相关知识,如果对这一块了解比较透彻的人可以略过此段。
SESSION的存储--存储在服务器端:(SESSION的三种存储模式)
1.存储在网站的进程中(大家知道asp.net应用程序网站运行时都会开启一个W3WP.exe进程,SESSION的生命周期便与此进程共存亡)
2.存储在STATE SERVER进程中(这是asp.net服务中一个单独的进程:aspnet_state.exe)
3.序列化存储在SQL SERVER中
SESSION的过期:
SESSION的默认过期时间为20分钟,这个可以通过IIS来进行设置,也可以通过在APP.CONFIG中进行配置,SESSION采用的是平滑过期策略,何谓平滑过期?在SESSION的默认过期时间内,如果客户端和服务器端有过联系,那么此时间将会自动默认向后延期默认过期时间,如果在过期时间内客户端没有任何动作,那么此SESSION就过期了。
COOKIE的存储:
COOKIE存储在客户端,用户可以通过程序在写入COOKIE值时来定义该COOKIE的过期时间、所属的域。
COOKIE的过期:
COOKIE的过期时间为用户在写入COOKIE时自定义的COOKIE过期时间。
对SESSION及COOKIE作了简单的解释之后,接下来讲讲上面提到的实际应用过程中碰到的问题。
基类中对用户权限的验证放在基类的构造函数中,此时报错了,具体错误这里就不贴出了,因为事情已经过去一段时间了,当初也没把错误保存下来。然后将错误GOOGLE了一下,基本上都说网站禁用了SESSION值,或者说建议使用STATE SERVER方式来进行存储,觉得都不太可能,因为在两个页面间使用SESSION传值是没有任何问题的,突然想到是不是在基类的构造函数中SESSION的生命周期还没开始,判断正确,唉,居然犯这么初级的错误。针对这个问题,又是如何解决的呢?
在基类中添加事件监听,事件方法为Page_Load,在Page_Load方法中放入原来基类构造函数中的用户权限验证方法。