您是第 Web Page Tracking 位访客

水~墨~

昂首阔步,不留一点遗憾!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

待续内容: Asp.net配置  身份验证几个选项区别;状态管理的几个区别;

 

原理:

1. 生成随机字符串

2.将字符串存入session,用于后期的比较

3.根据字符串生成图片(干扰,背景)发送给客户端

 

 

方法: ValidataCode.aspx  生成验证码图片, Login.aspx 引用Validatacode.aspx

 

 

ValidataCode.aspx.cs

 

 

 

Login.aspx        <asp:Image ID="imgValidatacode" runat="server"  ImageUrl="~/ValidataCode.aspx"/>

                             onclick="this.src=this.src+'?'"          --换验证码无刷新

验证:

if (Session["CheckCode"].ToString() != validatacode)
{
    messagebox("验证码不对!");
    return;
}

 

 

 

访问Login.aspx页面后,页面返回一个ASP.NET_SessionId=uujiui45uxmum43bg3y5km45;

image

这个sessionid 标志客户端的session的值寸在服务器端内存中的位置。

例如本例中:session["CheckCode"] 的值就存放在 服务端内存中 ASP.NET_SessionId=uujiui45uxmum43bg3y5km45的位置。(一个客户端的多个session只分配一个sessionid)

 

 

 

 

 

验证码验证后的处理

 


 

 

 

验证码session的过期时间限制

 

1)

全局网站(即服务器)级

IIS-网站-属性-Asp.net-编辑配置-状态管理-会话超时(分钟)-

设置为120,即为2小时,即120分钟后如果当前用户没有操作,那么Session就会自动过期。

 

这个时间是自最后一次用户访问网站的时间

 

image

image

 

2)

 

网站级

IIS-网站-具体网站(如DemoSite)-属性-Asp.net,此时有两个选项,一个是“编辑全局配置”,一个是“编辑配置”。

如果“编辑全局配置”,就和上个配置一样。

如果“编辑配置”,则只对当前网站生效。因为一个服务器可能有很多独立网站。

1、继续选择“状态管理”-会话超时(分钟)-设置为360,即360分钟。效果同上,只不过只对当前网站生效。

2、身份认证-Forms-Cooke超时,选择"12:00:00",即12个小时。可选项共有以下八项:

image

00:15:00

00:30:00

01:00:00

02:00:00

04:00:00

08:00:00

12:00:00

1:00:00:00

即最长24小时,最小15分钟。这是默认的配置。在应用中可以自由定制。

 

 

 

 

 

3)

应用程序级

同网站管理,只不过作用域仅限当前应用程序。

 

4)

页面级

在某页面中,设置Session.Timeout = 30;即可临时修改某页面的会话过期时间。

查看某个Session的过期时间,可以用

view plaincopy to clipboardprint?
TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);
TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);

其中,二和三的设置,体现在Web.config中即:

view plaincopy to clipboardprint?
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms" >
<forms name="AuthLogin" loginUrl="/Login.aspx" protection="All" timeout="360" slidingExpiration="true"/>
</authentication>
<sessionState mode="InProc"  cookieless="false" timeout="20" />
</system.web>
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration> 
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms" >
<forms name="AuthLogin" loginUrl="/Login.aspx" protection="All" timeout="360" slidingExpiration="true"/>
</authentication>
<sessionState mode="InProc"  cookieless="false" timeout="20" />
</system.web>
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration>

以上四处设置的优先级为页面级>应用程序级>网站级>服务器级。换句话说,如果页面设置为20分钟,网站设置为120分钟,那么,显然以20分钟为生效的过期时间。

另外一个值得注意 的地方。

在设置二处,设置会话超时(SessionState)120分钟,而同时用forms认证,设置为“00:15:00”,即15分钟,并且slidingExpirationo为false,则真正生效的Session过期时间是多少呢?

有效的结果是SessionState的设置,即120分钟。

如果有设置Session过期时间没有生效的,请检查以上几处配置。

 

 

 

 

 

posted on 2012-03-04 23:07  水墨.MR.H  阅读(1509)  评论(2编辑  收藏  举报
知识共享许可协议
本博客为水墨原创,基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的水墨(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。