日期:2014-05-17  浏览次数:20923 次

不能判断两个不同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一下。