生物秀博客数据载入中……
 
Welcome to xiaoguo's blog and have  a good time here ! the new  blog url is: http://cn.cgzzz.cn

ASP返回登陆前页面
[ 2008-2-21 23:50:00 | 作者: 落叶人生 ][生物百科][细胞在线][细胞看看]
 

嗨,费了好大功夫终于想到asp用户登陆后自动返回到登陆前面的方法了。
在网上查资料时,有说用session 或cookies记录下每个页面的ID然后登陆后转向调用就行了,在下认为这难免有些小题大作,而且操作起来有些麻烦(不会写),所以就没有用这种方法;还有说用document.referrer的,然而这只能是返回前一页面,而非登陆前一页面,用样也有说用request.server("http_referer")方法实现的,而它也只是转向前一页面。后来看到有说用表单隐藏域在登陆页面记录下登陆前页面,然后再在登陆处理页面获取该隐藏域值后用javascript中的window.location转向就行了,在下javascript编程能力比较差,于是用最笨的办法试了下:
登陆前页面:a.asp,其内容简化为:
if session("user")="" then
<script language=javascritp>window.location="login.asp"</script>
end if
然后在登陆页面表单中加上:
<input type="hidden" name="c" value="/blog/<%=request.ServerVariables("HTTP_REFERER")% >
再在登陆check页面用request.form("c")
check.asp页面简化为:
<form action="" method="post" name="myform"><input name="referrer" type="hidden" value="/blog/<%=request.Form("referrer")%>" /></form>
 
<script language="javascript"  >
<!--此函数和上面表单隐藏域及下面一句ASP调用供弹出添加成功对话框后转向相应之用,主要为传递referrer栏目中value值
function pass()
  {
  var c;
  alert("恭喜!\n\n登陆成功!");
   c=document.myform.referrer.value
  window.location=c;
  }
  //-->
  </script>

<%Response.Write("<script>pass()</script>")%>
这样看起来似乎可以,a.asp页面转到login.asp后,a.asp页面地址信息被<%=request.ServerVariables("HTTP_REFERER")% >放到隐藏域中被传到check.asp页面后被利用来作页面转向,分析倒没错,可惜试了好几次都没成功,把a.asp中转向代码换成<%response.redirect("login.asp")%>还是没用,把login.asp中换成用document.referrer用javascript赋给隐藏域后再传到check.asp页面也还是不行,调试时发现以上处理都有一个共同的错误:check.asp页面某一处缺少对象,察看解析出的html发现就是最后一个页面的value值其实为空,其实是没能获得前面页面的值。
分析一下,login.asp到check.asp页面问用表单传值是不会有问题的,那问题应该是出在a.asp到login.asp页面间了,也就是说不管是request.ServerVariables("HTTP_REFERER")还是document.referrer都没用获得a.asp页面的地址,那究竟是什么原因呢?
查了一下,才知道,这两种方法在下列情况下都是无法获得前一页面的地址的:
1.从收藏夹链接
2.单击'主页'或者自定义的地址
3.利用Jscript的location.href or location.replace()
4.在浏览器直接输入地址
5.<%Response.Redirect%>
6.<%Response.AddHeader%>或<meta http-equiv=refresh>转向
7.用XML加载地址
这才知道,试了半天原来是犯了大忌,做了半天无用功。那么看来上面的自动转向方法都不能用了,于是问题又集中在自动转向的方法上。
又找了好久看到下列情况,上面两种方法可以获取前页面地址信息:
1.直接用<a href>
2.用Submit或<input type=image>提交的表单(POST or GET)
3.使用Jscript提交的表单(POST or GET)
这下有救了,用javascript把表单自动提交那就行了。于是问题终于解决了。
详细方法:
--------a.asp页面----------:
<%if trim(session("user"))="" or trim(session("pass"))="" then%>
 <form name="submit_form" action="../user/login.asp" method="get"></form>
<script language="javascript">
document.submit_form.submit()</script>
<%response.end()%>
<%else%>
其它登陆后才能显示的内容
<%end if %>
--------login.asp页面---------:
<form action="check.asp" name="myform" method="post">
<input type="hidden" name="c" value="/blog/<%=request.ServerVariables("HTTP_REFERER")% >
其它登陆文本框<input>
</form>
--------check.asp页面---------:
<input type="hidden" name="c" value="/blog/<%=request.ServerVariables("HTTP_REFERER")% >
再在登陆check页面用request.form("c")
check.asp页面简化为:
<form action="" method="post" name="myform"><input name="referrer" type="hidden" value="/blog/<%=request.Form("referrer")%>" /></form>
 
<script language="javascript"  >
<!--此函数和上面表单隐藏域及下面一句ASP调用供弹出添加成功对话框后转向相应之用,主要为传递referrer栏目中value值
function pass()
  {
  var c;
  alert("恭喜!\n\n登陆成功!");
   c=document.myform.referrer.value
  window.location=c;
  }
  //-->
  </script>
这样麻烦点,但代码好懂,所以在下也省得花心思想更地道的方法了。不过,不知道把login和check写在一个页面后直接用document.referrer或request.ServerVariables("HTTP_REFERER")行不行,没用试,不过我想应该不行,因为虽然是一个页面但提交一次后是自身转向自身,最后一次执行的前一页面是本身,还是不是登陆前页面,所以估且用上面的笨方法了。
嗨,费了好长时间,张于把这个问题解决了!

 
Re:ASP返回登陆前页面
[ 2008-5-8 9:33:56 | 作者: 访客(游客) ][生物百科][细胞在线][细胞看看]
 
访客(游客)白@痴
 
个人主页 | 引用 | 返回 | 删除 | 回复
发表评论:
生物秀博客数据载入中……

小郭寄语:太阳从有梦的地方升起,月亮在有梦的地方朦胧.只要有梦,终会成功!

生物秀博客数据载入中……


生物秀博客数据载入中……
时 间 记 忆
生物秀博客数据载入中……
最 新 评 论
生物秀博客数据载入中……
最 新 日 志
生物秀博客数据载入中……
论  坛 新 帖
最 新 留 言
生物秀博客数据载入中……
搜 索
用 户 登 录
生物秀博客数据载入中……
友 情 连 接
博 客 信 息
生物秀博客数据载入中……



 
   
Powered by Oblog.