身份验证:From验证

Step 1:新建数据库(库:MyForms ;表:users ;字段:ID,userName, userPwd);

Step 2:新建网站,web.config 的文件全部代码如下:

<?xml version="1.0"?>
<configuration>
    <appSettings/>
    <connectionStrings/>
  
    <system.web>
        <compilation debug="true"/>
    
    <sessionState cookieless="AutoDetect"/>
    <!--解决当浏览器端禁用Cookie时-->
    
        <authentication mode="Forms">
      <forms name="CookieName" loginUrl="login.aspx" protection="All"></forms>
      <!--loginUrl为登录面URL,如果没有身份验证Cookie,客户端将被重定向到此URL-->
    </authentication>
    
   <!--配置文件中,如果配置角色有allow项要放在deny项的前面,而users要配置为*,而不是?
   参考文章:http://www.jb51.net/article/21146.htm
   -->
    <authorization>
      <deny users="?"/> 
    </authorization>
    
    <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="NoAccess.htm" />
        <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>
    
    </system.web>
  
</configuration>


Step 3:添加一个 login.aspx  页面;拖2个 TextBox ,1个Button 和1个CheckBox ;
           并将CheckBox 的text 属性设为:“是否保存Cookis ";
Step 4:login.aspx 的隐藏代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient; //导入命名空间

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string userName = TextBox1.Text.Trim();
        string userPwd = TextBox2.Text.Trim();
        SqlConnection con = new SqlConnection("Server=.;Database=MyForms;User ID=sa;Password=123456");
        con.Open();
        SqlCommand cmd = new SqlCommand("select count(*) from users where userName='" + userName + "' and userPwd='" + userPwd + "'", con);
        int count = Convert.ToInt32(cmd.ExecuteScalar());
        if (count > 0)
        {
            System.Web.Security.FormsAuthentication.SetAuthCookie(this.TextBox1.Text, this.CheckBox1.Checked);
            Response.Redirect("Default.aspx");
            //上面两行,也可以换成下面一行,如通过验证则直接转向请求的页面,而不需要Responsel.Redirect("");
            //System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text, false);   
        }

        else
        {
            Response.Write("用户不合法");
        }       
    }
}

Step 5:拖一个Button 到 Default.aspx 上,将其text 属性设为"登出",其事件代码如下:

protected void Button1_Click(object sender, EventArgs e)
    {
        System.Web.Security.FormsAuthentication.SignOut();
    }

http://www.cnblogs.com/yoyebina/archive/2006/12/03/580121.html


关于FormsAuthentication创建的身份验证与Session的问题

开发系统时发现:使用FormsAuthentication创建的身份验证,在系统重新生成和IIS重新启动时,均还有效,但此时Session已无效。所以单纯的用FormsAuthentication进行身份验证就会有问题,因为在这两种情况下,系统仍可进行操作,不会返回到登录验证页,但此时Session中保存的值(如用户帐号、姓名等等)都没有了。所有我只能使用FormsAuthentication、Session双重验证,其实就是使用Session验证了,FormsAuthentication验证已没有意义。请教大家是如何解决这个问题的??


FormsAuthentication  只跟COOKIE有关  跟SESSION是无关的

 FrmsAuthentication 有效果是因为相关的验证COOKIE存在了你的硬盘上,验证时检测到这个COOKIE所以当然验证通过。而SESSION当然没了 因为重新生成过了。


http://bbs.csdn.net/topics/70464881


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值