不能判断两个不同session对象的问题,具体请进,谢谢!
一个页面原来利用
if session( "a ")= " " then
response.Write " <script LANGUAGE= 'javascript '> alert( '网络超时或者您还没有登录请登录 ');history.go(-1); </script> "
response.End
来判断用户权限
现在我要将这个页面开放给b用户,于是加了一条
if session( "a ")= " " and session( "b ") then
同时,在b的登录页面加入session( "b ")= request.cookies( "username ")
但是,b还是不能使用页面
问题可能出在哪儿呢? 谢谢各位!
------解决方案--------------------你只要给用户b登录的帐号和密码就行了,其他的不用管
------解决方案--------------------确定request.cookies( "username ")不为空 ?
------解决方案--------------------if session( "a ")= " " and session( "b ") = " " then ...
估计楼主的意思是,如果访问的人,既不是a,也不是b,那么才提醒出错
也就是说,如果是a,或者b都可以正常访问
这样的代码太想当然了,首先,每个用户访问你的这个系统,都会有各自的一个session空间
session空间相互之间是严格分离的,也就是说,同样的一个session("abc"),a访问的时候
可能是123,b访问的时候,可能是456,他们是没有任何联系的。
根据上面所说的,楼主的代码,在a访问的时候,结果的依据就是a空间里面的session("a")和session("b")
在b访问的时候,结果的依据就是b空间里面的session("a")和session("b"),注意在这里
a空间的session("a")和b空间里面的session("b")是绝对的两个东西!!!
也就是说a是不知道b的session("a")或者session("b")的值的,这个是微软asp的session机理
这样的机理很适合于编写多用户系统,但是绝对不适合于实现楼主的想法。。。
---
所以,建议楼主的思路改一下:
首先确定整个系统要分成几分,比如查询是一份,录入是一份,管理是一份,等等,然后每一份编一个号,数字
或者字母等都可以,每个用户分配一个账号密码,和一个权限字符串,比如a的账号是admin密码是123,权限串是“ABC”
b的账号是user密码是111,权限串是“C”,登录的时候,将权限串写入一个session中
例如写入session("quanxian")中,判断的代码如下
if InStr(session("quanxian"),"B") < 0 then
response.Write " <script LANGUAGE= 'javascript '> alert( '不具备录入权限');history.go(-1); </script> "
response.End
end if
那么a登陆这个页面,他的session("quanxian")是"ABC",是包含"B"的(以上用InStr判断包含),则不提示错误
b登陆这个页面,他的session("quanxian")是"C",是不包含"B"的,则不提示错误
------
微软asp判断session是否共用,是靠ASPSESSIONID来判断的
当用户访问你的系统的第一个页面的时候(任意一个页面,不管是否登陆),IIS就会给这个用户开启一个新的session空间
并且分配一个空间号,然后他继续访问其他页面的时候,就会告诉系统他是已经有了session空间号了的,IIS就根据这个号
给他使用他之前分配得到的空间,而不是新开一个空间,这样,用户的session变量就得到了保持。而如果是其他的用户,
他的session号和此用户是不一样的,IIS不会把此用户的session空间给那个用户使用,这样用户的session变量就得到了
隔离保护。
那么也许你会问,要是我报的是别人的ASPSESSIONID,那我是不是可以用别人的session变量了,如果可以的话,例如
a的session("quanxian")为“ABC”,我的权限为空,要是我用了a的session空间,我就也有“ABC”的权限了。。。
答案是有可能的。。。
因为,浏览器访问系统的时候,是通过Cookie来告诉IIS他的session号的,在服务器端,可以用
request.ServerVariables("Http_Cookie")来查看
你可以看到类似 ASPSESSIONIDCABDSQTB=LMJLFGOAJGIGCBFKPEKHLAHJ 的字符串,这个就是客户端的session编号,这个
是加密了的,至于怎么加解密的,没有必要理会,只要你的新的客户端的Cookie设置为
ASPSESSIONIDCABDSQTB=LMJLFGOAJGIGCBFKPEKHLAHJ ,那么他也可以使用这个用户的session了!
至于浏览设置的方法,我没有具体研究,只是在C++的程序里面实现过,具体的代码可以google一下。