再谈 session 与 cookies
关于session 与 cookies 都是被嚼乱的话题了,但我想很多人与我一样对session 都曾有过误解,事实上一般情况下 session 的应用需要cookies支持!
所以很多程序运用session,如果客户端不能接受cookies ,就不能正常运行,所以有时有必要先检查下客户端是否能写入cookies,
这里给出几种方法:(都是网上找的,非我原创)
1,用javascript
<script type=”text/javascript”>
var cookieEnabled=(navigator.cookieEnabled)? true : false
//判断cookie是否开启
//如果浏览器不是ie4+或ns6+
if (typeof navigator.cookieEnabled==”undefined” && !cookieEnabled){
document.cookie=”testcookie”
cookieEnabled=(document.cookie==”testcookie”)? true : false
document.cookie=”" //erase dummy value
}
if (cookieEnabled) {
alert(“cookies is open”)
}
//if cookies are enabled on client’s browser
//do whatever
</script>
2,在两页之间,请求一个SessionID在第一页,传递它到下一页。与这一页请求到的SessionID比较。相同说明客户端浏览器接受Cookies;不同则不接受。
比如你可以在第一页中放一个(hidden field),并把SessionID写入它。提交后,从页面数据中取出SessionID.像这样:
<form name=”Form1″ method=”post” action=”sessions2.asp”>
UserName:<input name=”username”><br>
Password:<input name=”userpassword”>
<input type=”hidden” name=”theSessionID” value=”<%=Session.SessionID%>”><br>
<input type=”submit” value=”Submit”>
</form>
在第二页中我们来判断SessionID是否相同。
<%
dim theSessionID
theSessionID = Request.Form(“theSessionID”)
If theSessionID = Session.SessionID Then
“当二者相等时,则cookie功能开启
Response.Write “Cookie已开启”
Else
“若二者相等时,则cookie功能关闭
Response.Write “Cookie没有开启!”
End If
%>
3,首先在一个页面里写入一个cookie,如:
<%
Response.Cookies(“status”)=”onoroff”
%>
在第二页里读出此cookie:
<%
if Request.Cookies(“status”)=”" then
“当cookies(“status”)里没有值时,则cookie功能没有开启
Response.Write “Cookie没有开启!”
else
“当cookies(“status”)里有值时,则cookie功能开启
Response.Write “Cookie已开启”
end if
%>
如果你想不管客户端不管能不能写入cookies 都能正常访问你的网站,那只好传递参数,我的做法双管齐下
如: url = http://yourdomain/xx.asp?r = ,x,y
<%
if isempty(request.cookies(“cfnib”)) or request.cookies(“cfnib”) = “” then ‘先判断是否存在cookies
response.cookies(“cfnib”)(“right”) = request.QueryString(“r”)
response.cookies(“cfnib”).Domain = “219.238.77.180″
‘response.cookies(“cfnib”).Path = “/web/cfnib”
response.cookies(“cfnib”).Expires = Date+365
end if
session(“right”) = request.Cookies(“cfnib”)(“right”) ‘读取cookies 赋值给session(“right”)
if isnull(session(“right”)) or isempty(session(“right”)) or session(“right”) = “” then ‘如果不能写入cookies ,直接赋值
session(“right”) = request.QueryString(“r”)
end if
‘response.write session(“right”)
‘response.end
%>
