|
蓝森林 http://www.lslnet.com 2006年8月25日 8:28
[asp,session]session和浏览器地址栏中的域名有什么关系?
问题有些复杂,请慢慢看,谢谢!
[b]问题起因[/b]:
手上有两个网站:aaa.com、bbb.com,共用bbb.com中的会员数据。要求在aaa.com/user.asp上执行登录操作后访问bbb.com直接便是已登录状态,而不需要再次登录。
[b]我的做法[/b]:
aaa.com/user.asp部分代码:[code]
<% if session("uname") <> "" then
response.write(session("uname"))
else %>
<form action="http://bbb.com/checklogin.asp" target="_self">
.......
</form>
<% end if%>
[/code]
bbb.com/checklogin.asp中自行登录验证:
[code]if 成功 then
session("uname")=rs("uname")
response.write("<script>alert('"&session("uname")&"登录成功!');location.href='aaa.com/user.asp';</scr"&"ipt>")
else
......
end if
[/code]
到此为止,返回现像是:
输入用户名密码之后,弹出alert:username登录成功!(bbb.com下的session("uname")值为“username”)
然后当页面转到aaa.com/user.asp后却仍然显示登录框(aaa.com下session("uname")值为空,和bbb.com下的session("uname")是两码事)
[b]然后改进[/b]:
将登录框和已登录的信息显示都放到bbb.com下,也即:
aaa.com/user.asp部分代码:
[code]<iframe src="bbb.com/user.asp" .....></iframe>[/code]
bbb.com/user.asp部分代码:
[code]<% if session("uname") <> "" then
response.write(session("uname"))
else %>
<form action="http://bbb.com/checklogin.asp" target="_self">
.......
</form>
<% end if%>
[/code]
bbb.com/checklogin.asp仍然不变,也就是说bbb.com/user.asp中的if session("uname") <> "" 验证的已经是bbb.com的session("uname")了,而不再是aaa.com下的session("uname") ,按理说此时登录后的session("uname") 值应该为“username”了,但是:
[b]出现问题[/b]
输入用户名密码之后,弹出alert:username登录成功!(bbb.com下的session("uname")值为“username”)
然后当页面转到aaa.com/user.asp后却仍然显示登录框(此时session("uname")值的验证是由iframe嵌入的bbb.com/user.asp,为什么这里的session("uname")也为空呢?)
[b]一点其他的[/b]:
经验证,如果先访问bbb.com/,不进行登录,直接再访问aaa.com/user.asp(页面内容为iframe框架下的bbb.com/user.asp),执行登录后能够成功显示用户名——即执行“response.write(session("uname"))”。也就是,如果在aaa.com/user.asp页面登录前访问了bbb.com/则可以登录成功,否则会失败,失败后访问bbb.com,则就可以成功了。
[b]问题综述[/b]:
1、改进前,bbb.com/checklogin.asp中的session("uname")和aaa.com/user.asp中的session("uname")是否是同一变量?(应该不是了)
2、改进后,aaa.com所iframe的bbb.com/checklogin.asp中的session("uname")和直接访问bbb.com/user.asp中的session("uname")是否是同一变量?若是,请回答3
3、使用iframe将bbb.com/user.asp嵌入aaa.com/user.asp,此时在bbb.com/user.asp中验证的session("uname")又是哪个变量?
4、session和domain.com有什么关系?
5、如何解释“[b]一点其他的[/b]”中所表述的现像呢?
---------------------------------
有些晕,还请高手指点,诚挚恭谢!
|
晕倒,都被吓了?没有人帮忙么? |
唉,让我甚为失望啊~
为什么就没人来帮帮忙呢?BlueIdea不是有很多热衷于思考的高人吗? |
没仔细看,不同的域名session不能共用的……
即使名字一样。
你这种做法一般都是登陆A的时候,同时提交到B的登陆页面,就相当于同时登陆了。
但是两个站点还是独立运行的,session还是各自的session。
要不就把登陆状态保存到一个表里,check是否登陆的时候检查这个表就行了。 |
“不同的域名session不能共用的……即使名字一样。”
这个的确是这样,但是我却想不通上面问题综述中的“3、”
3、使用iframe将bbb.com/user.asp嵌入aaa.com/user.asp,此时在bbb.com/user.asp中验证的session("uname")又是哪个变量?
此时bbb.com/user.asp(被iframe框架后的)中的session("uname")不再是直接访问bbb.com/user.asp时的session("uname")吗?那是否又是aaa.com/user.asp时的session("uname")
还请指点,感谢! |
应该是bbb的session。
反正就是aaa/*.asp访问的都是aaa的session
bbb/*.asp访问的都是bbb的session。 |
PS:
“提问的智慧”看过了,却发现,往往把问题写得乱七八糟热心人还可能回答些,像我这样把问题一条一款列得那么清楚,把自己的思路和想法写得明明白白,以一种诚挚学习的态度而不是不劳而获的态度来求助,得到的却是——“没仔细看”,甚至是没人看,唉! |
萧萧小雨在上个帖子中说
如果真如你所说,那为什么又出现“[b]出现问题[/b]”这一节的问题呢?:confused: |
==============================
输入用户名密码之后,弹出alert:username登录成功!(bbb.com下的session("uname")值为“username”)
然后[color=red]当页面转到aaa.com/user.asp后却仍然显示登录框[/color](此时session("uname")值的验证是由iframe嵌入的bbb.com/user.asp,为什么这里的session("uname")也为空呢?)
==============================
看红色的字,这个框是你的aaa的user.asp除了iframe以外的代码报出来的吧?
你登录只是登陆了bbb,aaa没有登陆,session当然是空的了。虽然你iframe了bbb的页面,但是对aaa的session没有任何影响。
|
哦,终于看明白了。
楼上的回复请无视。
你是从内嵌的bbb/user.asp页面登陆,然后转到aaa/user.asp,相当于aaa/user.asp下面又嵌套了一个aaa/user.asp,然后这个里面嵌套了bbb/user.asp。
iframe这个东西,我理解:他相当于也是一个窗口。
aaa/user.asp一刷新,里面这个iframe窗口就相当于新开的窗口了。 |
看明白了也就不用理会下面的了,请继续帮我解答8楼的问题,非常感谢!
---------------------------------------------
[color=#cccccc]可能你没有理解我“[b]然后改进[/b]”中所做的操作,其实这个改进完全是将aaa.com/user.asp写成<iframe src="bbb.com/user.asp" .....></iframe>,其他根本没有内容了。
打开显示aaa.com/user.asp时,在页面中间点右键查看属性地址是bbb.com/user.asp的,在此时的aaa.com/user.asp中也并没有验证session,验证session这步仍然是在bbb.com/user.asp中进行的——和直接访问bbb.com/user.asp不同的仅仅在于bbb.com/user.asp被aaa.com/user.asp iframe了一下。
那么你上面说就不对了呀:
“你登录只是登陆了bbb,aaa没有登陆,session当然是空的了。虽然你iframe了bbb的页面,但是对aaa的session没有任何影响。”[/color]
|
反正这个iframe挺怪的。 |
萧萧小雨在上个帖子中说
Sorry,这是[b]发贴[/b]时的疏忽
下面这句应该是:
response.write("<script>alert('"&session("uname")&"登录成功!');[color=RED]top.[/color]location.href='aaa.com/user.asp';</scr"&"ipt>") |
恩,一样的,相当于刷新aaa/user.asp,一刷新,里面那个iframe的窗口就不是原来那个了,所以就.........
我理解是这回事。 |
唉,我要疯了.......
刚刚无语地做了一次实验——按提炼过的思路重写,结果......并没有“[b]出现问题[/b]”。
那么看来“[b]出现问题[/b]”的原因并不在于iframe、domain与session之间....
那么,又是什么原因致使“[b]出现问题[/b]”的呢——显然是aaa.com和bbb.com中的其他代码,那么又要如何操作才能“[b]出现问题[/b]”,是什么样的代码才能导致“[b]出现问题[/b]”?
现在“[b]问题综述[/b]”中的1-4已经都解决了,只“5”还没有解决,必然是其他代码引起的了,也就无从讨论了。
[color=RED]再次真心感谢楼上各位![/color] |
附“实验”代码:
aUser.asp
[code]<iframe src="http://bbb.com/bUser.asp"></iframe>
<br />
<br />
aUser的session:<%=session("uname")%>[/code]
bUser.asp
[code]<% if session("uname") <> "" then%>
bUser的session:<%=session("uname")%><br />
<a href="http://bbb.com/checklogin.asp?act=logout">退出登录</a>
<%else %>
<form action="http://bbb.com/checklogin.asp" target="_self" method="post">
<input name="user" type="text" id="user" value="user" />
<input name="psw" type="text" id="psw" value="psw" />
<input type="submit" name="Submit" value="提交" />
</form>
bUser的session:<%=session("uname")%>
<% end if%>[/code]
checklogin.asp
[code]<%
if request.QueryString("act") = "logout" then
session.Abandon()
response.Redirect("http://www.bbb.com/bUser.asp")
end if
if request.form("user") = "user" and request.Form("psw") = "psw" then
session("uname") = "user"
response.write("<script>alert('"&session("uname")&"登录成功!');top.location.href='http://aaa.com/auser.asp';</scr"&"ipt>")
end if
%>[/code]
注意aUser.asp和bUser.asp、checklogin.asp要放到不同的域名下。 |
呵呵,可笑,绕了一圈,没有问题!OMG! |
哈哈,晕。 |
|