请教一个登录后返回之前界面的方法

caobob 2006-04-18 11:58:29
就象CSDN论坛一样,我登录以后可以回到原来的页面.昨天发贴有人告诉我用this.Request.UrlReferrer但是回去试了下,发现有些疑问.这个URL是当前的URL.不知道自己是什么地方弄错了.请有经验的朋友帮忙指点下.
...全文
528 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
amnoh 2006-04-18
  • 打赏
  • 举报
回复
to amnoh(会走路的鱼):


学asp.net别告诉我不知道forms身份验证,我给的可是经典实现方法.
=============================================================

呵呵,是很经典,不过如果一套站点的普通登录页面和管理员的登录页面不一样呢?还必须是一个APP的情况呢?
是不是需要手工处理ReturnUrl呢,
不知道这位兄弟从哪看出我不知道forms验证了,莫非是我用Response.Redirect(returnUrl);了??
呵呵,这是个人习惯问题了,刚做了一个基于角色的,要加密,所以cookie是手工写的,这时候就不需要用什么RedirectFromLoginPage(Login1.UserName, true)了吧.... Response.Redirect岂不就是很好的选择, 经典的东西未必就是合适的东西
viena 2006-04-18
  • 打赏
  • 举报
回复
如何运用 Form 表单认证


ASP.NET 的安全认证,共有“Windows”“Form”“Passport”“None”四种验证模式。“Windows”与“None”没有起到保护的作用,不推荐使用;“Passport”我又没用过,唉……所以我只好讲讲“Form”认证了。我打算分三部分:

第一部分 —— 怎样实现From 认证;

第二部分 —— Form 认证的实战运用;

第三部分 —— 实现单点登录(Single Sign On)

第一部分 如何运用 Form 表单认证

一、 新建一个测试项目

为了更好说明,有必要新建一个测试项目(暂且为“FormTest”吧),包含三张页面足矣(Default.aspx、Login.aspx、UserInfo.aspx)。啥?有人不会新建项目,不会新增页面?你问我咋办?我看这么办好了:拖出去,打回原藉,从幼儿园学起……

二、 修改 Web.config

1、 双击项目中的Web.config(不会的、找不到的打 PP)

2、 找到下列文字 <authentication mode="Windows" /> 把它改成:

<authentication mode="Forms">

<forms loginUrl="Login.aspx" name=".ASPXAUTH"></forms>

</authentication>

3、 找到<authorization> <allow users="*" /></authorization>换成

<authorization><deny users="?"></deny></authorization>

这里没什么好说的,只要拷贝过去就行。虽说如此,但还是有人会弄错,如下:

<authentication mode="Forms">

<forms loginUrl="Login.aspx" name=".APSX"></forms>

<deny users="?"></deny>

</authentication>

若要问是谁把 <deny users="?"></deny> 放入 <authentication> 中的,我会很荣幸地告诉你,那是 N 年前的我:<authentication> 与 <authorization> 都是以 auth 字母开头又都是以 ation 结尾,何其相似;英文单词背不下来的我以为他们是一伙的……

三、 编写 .cs 代码——登录与退出

1、 登录代码:

a、 书本上介绍的

private void Btn_Login_Click(object sender, System.EventArgs e)

{

if(this.Txt_UserName.Text=="Admin" && this.Txt_Password.Text=="123456")

{

System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.Txt_UserName.Text,false);

}

}

b、 偶找了 N 久才找到的

private void Btn_Login_Click(object sender, System.EventArgs e)

{
if(this.Txt_UserName.Text=="Admin" && this.Txt_Password.Text=="123456")
{

System.Web.Security.FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false);

Response.Redirect("Default.aspx");

}
}

以上两种都可发放验证后的 Cookie ,即通过验证,区别:

方法 a) 指验证后返回请求页面,俗称“从哪来就打哪去”。比如:用户没登录前直接在 IE 地址栏输入 http://localhost/FormTest/UserInfo.aspx ,那么该用户将看到的是 Login.aspx?ReturnUrl=UserInfo.aspx ,输入用户名与密码登录成功后,系统将根据“ReturnUrl”的值,返回相应的页面

方法 b) 则是分两步走:通过验证后就直接发放 Cookie ,跳转页面将由程序员自行指定,此方法多用于 Default.aspx 使用框架结构的系统。

2、 退出代码:

private void Btn_LogOut_Click(object sender, System.EventArgs e)
{

System.Web.Security.FormsAuthentication.SignOut();

}

四、 如何判断验证与否及获取验证后的用户信息

有的时候,在同一张页面需要判断用户是否已经登录,然后再呈现不同的布局。有人喜欢用 Session 来判断,我不反对此类做法,在此我只是想告诉大家还有一种方法,且看下面代码:

if(User.Identity.IsAuthenticated)
{

//你已通过验证,知道该怎么做了吧?

}

User.Identity 还有两个属性AuthenticationType(验证类型)与 Name(用户名称) ,大家要注意的是 Name 属性,此处的User.Identity.Name将得到,验证通过(RedirectFromLoginPage 或SetAuthCookie)时,我们带入的第一个参数 this.Txt_UserName.Text 。这个参数很重要,关系到种种……种种的情况,何出此言,且听下回分解……
灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件
活靶子哥哥 2006-04-18
  • 打赏
  • 举报
回复
FormsAuthentication.RedirectFromLoginPage
iuhxq 2006-04-18
  • 打赏
  • 举报
回复
to amnoh(会走路的鱼):


学asp.net别告诉我不知道forms身份验证,我给的可是经典实现方法.
amnoh 2006-04-18
  • 打赏
  • 举报
回复
你说的UrlReferrer是不是在IsPostBack判断后直接放进ViewState里?
==============================================================

可以,用你熟悉的什么方法都行,这个东西不保险,如果页面转过来的时候,中间还跳转过,就不对了,
加上防火墙的因素,不推荐使用
amnoh 2006-04-18
  • 打赏
  • 举报
回复
如果是Forms登录, ReturnUrl系统自己就带了,回转也有现成的
amnoh 2006-04-18
  • 打赏
  • 举报
回复
这还需要再给代码呀.........

在转的时候,把目标地址由你的 login.aspx 换成 login.aspx?ReturnUrl=本页(需要回来的地址)

在验证完成后,用
string returnUrl = Request.QueryString["ReturnUrl"];
取得地址,然后用
Response.Redirect(returnUrl);
就可以了,细节的地方,自己多思考思考
caobob 2006-04-18
  • 打赏
  • 举报
回复
TO:amnoh
每个页面都传那很麻烦,虽然可以做到母板里,但是觉得也不是很好.你说的UrlReferrer是不是在IsPostBack判断后直接放进ViewState里?
amnoh 2006-04-18
  • 打赏
  • 举报
回复
BS Ctrl+c & Ctrl+V 一大堆的
caobob 2006-04-18
  • 打赏
  • 举报
回复
能给些具体的代码吗?谢谢.
amnoh 2006-04-18
  • 打赏
  • 举报
回复
最好最好,在转向登录页面的时候,带上ReturnUrl参数,特别是如果你的页面需要转几下的时候,ReturnUrl就更有用了,UrlReferrer也不是不可以,但你应当在刚到登录页面时就检查并记录,要是提交后才去检查,那肯定是登录页面本身了,而且有的防火墙会把浏览器的Refer信息给拦截掉,所以不保险
tyochen 2006-04-18
  • 打赏
  • 举报
回复
直接用 FormsAuthentication.RedirectFromLoginPage(Login1.UserName, true); 不就可以了嘛!?
iuhxq 2006-04-18
  • 打赏
  • 举报
回复
.NET Framework 类库

FormsAuthentication.RedirectFromLoginPage 方法 [C#]请参见
FormsAuthentication 类 | FormsAuthentication 成员 | System.Web.Security 命名空间 | C++ 托管扩展编程
语言
C#

C++

JScript

Visual Basic

全部显示
将已验证身份的用户重定向回最初请求的 URL。

重载列表
将已验证身份的用户重定向回最初请求的 URL。

[Visual Basic] Overloads Public Shared Sub RedirectFromLoginPage(String, Boolean)
[C#] public static void RedirectFromLoginPage(string, bool);
[C++] public: static void RedirectFromLoginPage(String*, bool);
[JScript] public static function RedirectFromLoginPage(String, Boolean);
将已验证身份的用户重定向回最初请求的 URL。

[Visual Basic] Overloads Public Shared Sub RedirectFromLoginPage(String, Boolean, String)
[C#] public static void RedirectFromLoginPage(string, bool, string);
[C++] public: static void RedirectFromLoginPage(String*, bool, String*);
[JScript] public static function RedirectFromLoginPage(String, Boolean, String);
请参见
FormsAuthentication 类 | FormsAuthentication 成员 | System.Web.Security 命名空间 | C++ 托管扩展编程


--------------------------------------------------------------------------------

发送有关此主题的意见

© 2001-2002 Microsoft Corporation。保留所有权利。

caobob 2006-04-18
  • 打赏
  • 举报
回复
TO:boy_north
登录界面一般都是会把缓存关闭的.所以history没法用.还有用javascript做的话可以用document,不过我每页都要写代码去持久Url,这就复杂了.所以一时也没有好的解决方案.希望有这方面经验的朋友帮帮我吧.往往一句话一个思路就能解决问题了.
boy_north 2006-04-18
  • 打赏
  • 举报
回复
你可以用history.go(-1);
lubosun 2006-04-18
  • 打赏
  • 举报
回复
帮顶!同问?
caobob 2006-04-18
  • 打赏
  • 举报
回复
谢谢各位,那篇四个章节的文章我也有收藏.这次重看,理解了更多.结帐.

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧