做网站时往往需要在每个页面验证用户是否已登录,若没登录系统就重定向到登录页面。这个验证的过程在哪做呢?初学者最常用的方法就是在每个页面的Page_Load事件中进行session中用户的验证,即如下代码:

  

  如果这么做,上面的代码就会出现在站点所有需要身份验证的页面中,代码复制这么多遍就知道不是很好的解决方案。这里就用其它两种方法来解决这个问题。

  Ø  方法一:用Global文件

  Ø  方法二:用.Net自带的Form(表单)验证

  两种方法实现上述功能都很简单,尤其是.Net自带的Form认证用起来很灵活,对于各种权限问题基本都能解决。下面进行简单描述:

1.方法一:Global文件

  这个很容易想到,因为Global为全局文件,每一请求都会先经过该文件的处理,所以在这里进行身份验证即可代替所有页面内的身份验证了。至于Global文件内的事件及其作用这里不多说。

  直接在站点根目录添加“全局应用程序类(Global.asax)”,如果用Session验证身份就在其的Session_Start事件(本来想写在Application_BeginRequest或者Application_AuthenticateRequest中,不过Application为全局对象应用于整个应用程序,而session为每个用户特有的东西,所以放弃)中添加身份验证代码即可,例如:

    void Session_Start(object sender, EventArgs e) {//在新会话启动时运行的代码if (Session["user"] == null){Response.Redirect("Login.aspx");}}

  这样就实现了上面的在每个页面进行身份验证的相同功能。(注:上面这样用session进行身份验证的方法都不允许多用户在同一个浏览器进行登录操作)

2. 方法二:.Net自带的表单验证

 2.1 首先,打开web.config文件,在system.web节下加入如下代码:

      <authentication mode="Forms"><forms name=".ASPXAUTH" loginUrl="Login.aspx" protection="All" path="/" timeout="20"/></authentication><authorization><deny users="?"></deny></authorization>

  Ø  Mode=”Forms” 指定 Web 应用采用表单验证

  Ø  name 属性指定验证所需要的 cookie 的名称,默认值是“.ASPXAUTH”,如果在一个服务器上下挂了多个 Web 应用程序,必须重新指定该名称,因为每个应用程序都需要唯一的 cookie。

  Ø  loginUrl 属性指定登录用的页面,用于提供用户名和密码,默认值是“login.aspx”。

  Ø  defaultUrl 属性指定登入后跳转到的页面,默认值是“default.aspx”,当然你也可以跳转到用户登入前的前一个页面,并且这是 .NET 的默认实现。

  Ø  path 属性指定 cookie 的路径,默认值为“/”,指网站的根目录.

  Ø  timeout 属性指定用户多长时间不进行操作,身份凭证会过期,以分钟为单位,默认为 30 分钟。

  Ø  authorization节中的“allow”表示允许的意思,“*”表示所有用户;而“deny”表示拒绝的意思;“?”表示匿名用户;此处加入后,则代表根目录下的所有文件和所有的子目录都不能匿名访问,Login.aspx 页面除外

 2.2 然后在“登录”事件的末尾写上如下代码:

FormsAuthentication.RedirectFromLoginPage(userName.Text, false);

  RedirectFromLoginPage方法能发送验证票据验证Cookie,返回请求页面。例如:用户没登录前直接在 IE 地址栏输入 http://localhost/Test/Default.aspx ,那么该用户将看到的是Login.aspx?ReturnUrl=Default.aspx ,输入用户名与密码登录成功后,系统将根据“ReturnUrl”的值,返回相应的页面;如果没有“ReturnUrl”,则按照“defaultUrl”的属性自动转向。

 或添加如下代码:

      FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false); Response.Redirect("Default.aspx");

  这里的跳转页面将由程序员自行指定,无需在配置文件指定“defaultUrl”设置。

  例如我的登录事件为如下代码:

        protected void btnLogin_Click(object sender, EventArgs e){//模拟一下登录if (userName.Text=="admin" && passWord.Text=="123"){//第一个参数:经过身份验证的用户名。//第二个参数:若要创建持久 Cookie(跨浏览器会话保存的 Cookie),则为 true;否则为 false。FormsAuthentication.RedirectFromLoginPage(userName.Text, false); }}

  前台代码:

<body><form id="form1" runat="server"><div style="margin:0 auto">用户名:<asp:TextBox ID="userName" runat="server"></asp:TextBox><br />密 码:<asp:TextBox ID="passWord" runat="server"></asp:TextBox><asp:Button ID="btnLogin" runat="server" Text="Button" OnClick="btnLogin_Click" /></div></form>
</body>

  到此就解决上面的问题了。下面简单说一下Form(表单)验证的web.config的配置原则,例如我的项目目录结构如下:

  

  若直接在Web.config中添加身份验证信息,则整个项目下的页面都必须经过身份验证才能进入。若想让用户能直接访问App文件夹下的页面(不用经过身份验证),则有两种解决方案:

  (1).在App文件夹下也添加一个配置文件,并修改代码如下:(属性设置由最深一层的目录里的Web.config决定;如果子目录里没有Web.config文件,则由离它最近的父目录里的Web.config决定)

<configuration> <system.web> <authorization><allow users="*"/></authorization> </system.web>
</configuration> 

  (2). 直接修改原配置文件,在configuration节下加一个location节,如下为修改后的配置文件:

<configuration><system.web><authentication mode="Forms"><forms name=".ASPXAUTH" loginUrl="Login.aspx" protection="All" path="/" timeout="20"/></authentication><authorization><deny users="?"></deny></authorization><compilation debug="true" targetFramework="4.5" /><httpRuntime targetFramework="4.5" /></system.web><!--使得App下的文件都不用验证--><location path="App"><system.web><authorization><allow users="*"/></authorization></system.web></location>
</configuration>

  若想让根目录下的Default.aspx页面不用经过身份验证,只需将上面location的path属性设为” Default.aspx”即可。

3. 总结

  .NET自带的表单验证,其实质是使用一个特定的 cookie,在每次请求服务器时验证该 cookie 是否存在,从而决定用户是否具有相应的权限。这种方式用起来很方便,也比用session验证的方式安全的多,它还可以实现不同目录的按角色的权限控制,用起来很灵活,有需要的网上找资料即可。

站点页面身份验证问题相关推荐

  1. postfix+web页面+身份验证

    本篇笔者将介绍使用web方式实现对postfix邮件接收发送的管理,且需要经过身份验证 一:修改主机名: [root@lyt ~]# vim /etc/sysconfig/network [root@ ...

  2. forms身份验证 不跳转_Django用户身份验证实战

    在这篇Django文章中,我们 将讨论Django User 验证,Django附带了一个用户认证系统.它处理用户帐户,组,权限和基于cookie的用户会话.Django身份验证系统同时处理身份验证和 ...

  3. iis搭建ftp服务器及身份验证设置

    在win7下搭建ftp服务器: 搭建FTP安装步骤: 1.安装FTP服务器: 1)点击[开始]-[控制面板]-[程序]-[程序和功能]-[打开或关闭windows功能] 图一:安装FTP服务器(1) ...

  4. 【Asp.Net】:如何处理大量页面的身份验证跳转

    为了在多个页面中添加身份验证的跳转,我们一般都会选择在每个页面都编辑跳转代码,但当页面非常多的时候,工作量是非常大的.这里提供了一种新思路,为这些页面拥有的类添加一个父类,使其派生自某个类.由于Pag ...

  5. 【Windows Server 2019】FTP服务的配置与管理——配置FTP站点(上)IP地址限制、身份验证、授权规则和请求筛选

    目录 5. 配置FTP站点 5.1 FTP IP地址和域限制 5.2 FTP身份验证 5.3 FTP授权规则 5.4 FTP请求筛选 参考资料 关联博文 5. 配置FTP站点 5.1 FTP IP地址 ...

  6. java登录密码验证失败_java – Spring Security:如果身份验证失败,则重定向到登录页面...

    我们有两种登录方式. >用户名和密码由请求标头中的其他应用程序发送.检查IT,如果用户名和密码正确,则进入.[为此编写自定义过滤器] >如果请求标头中不存在用户名和密码,则会显示登录屏幕. ...

  7. Exchange2003启用web页面登陆(表单型身份验证)

    一. owa中启用表单验证 ·          ·     在Exchange server 2003中配置OWA启用基于表单的身份验证(忽略SSL): o    在服务器-协议-HTTP-HTTP ...

  8. twitter4j android,使用twitter4j api登录twitter而无需在android中打开用户身份验证页面...

    我使用twitter4j api登录twiter并发布推文. 我还在https://dev.twitter.com/apps/new上注册了该应用,并获得了消费者密钥和秘密. Configuratio ...

  9. ASP.NET MVC 4 (十三) 基于表单的身份验证

    在前面的章节中我们知道可以在MVC应用程序中使用[Authorize]特性来限制用户对某些网址(控制器/控制器方法)的访问,但这都是在对用户认证之后,而用户的认证则依然是使用ASP.NET平台的认证机 ...

最新文章

  1. 学计算机方面该怎样保养眼睛,电脑工作者如何保护眼睛?吃什么对眼睛好
  2. 电气实现:蒙特卡洛法 模拟多台电动汽车有序充放电负荷和(python实现)
  3. h5上传图片_怎么搭建自己的H5响应式网站
  4. VLC简介及使用说明
  5. 表达式求值Spring.Expressions
  6. 双十一期间快递员凌晨送件 将下班程序员误认成小偷
  7. 【英语学习】【Level 07】U02 Live Work L2 A place to call my home
  8. WEB HTTP:浏览器HTTP协议漫谈、请求对象Httprequest、响应对象HttpResponse、浏览器内部工作原理(待完善)
  9. 【python】人机大战
  10. python语言只采用解释一种翻译方式对吗_python与脚本语言
  11. nlp----基于检索的问答系统(bert相似度模型,倒排表)
  12. Microsoft Office2010 安装包和安装方法
  13. windows系统腾讯qq自带截图工具自动滚动截长图方法
  14. 批量自定义裁剪多张图片,可以按固定像素值或比例批量裁剪图片
  15. 使用Linux Deploy在android手机上部署Ubuntu
  16. 高斯消元法的MATLAB代码
  17. 道路车辆ISO20653标准中IPX9K试验方法
  18. vue手把手教你实现论坛bbs——(一)项目骨架
  19. 便利蜂智能制作策略平台的探索与实践
  20. 《IT经理世界》封面报道:淘宝隐忧

热门文章

  1. mysql查询每个用户最新的一条订单
  2. 从此以后谁也别说我不懂LDO了
  3. 计算机窗口显示不完整,win10软件窗口显示不全不完整怎么办
  4. 2021中国大数据50强震撼揭晓 智领云再度荣登榜单!
  5. 一篇关于业务可用性探测的纯“干”货,榨出一滴水算我输!
  6. sensor binning信号及信噪比
  7. 市场的力量:中国经济改革之思 所有习题答案(二)
  8. 安装python3出现报错信息:configure:error:cannot run C complied programs
  9. bat脚本一键批量修改文件名
  10. 手机摄像头的相关知识