session的安全?
--------------------------------------------------------------------------------
我做了一个登陆界面,就是当验证完用户名和密码后,再启用会话.
if (验证完毕) 后
session_start();
session_register("my_var");
然后进入下一界面:
<?php
if(!(session_is_registered("my_var")))
{
?>
<html>
<head>
<meta http-equiv="refresh" content="2;URL=../login.php">
</head>
<body>
请先到<a href="../index.html">首页</a>登录!
</body>
<?
exit();
require("abc.html");.
这个时候,URL已经是一窜很长的数字了我把这个URL拷贝出来再关IE,接着再打开一个IE把刚才的URL粘贴上去,可是IE还是能打开刚才的*.html.WHY???
问题点数:20、回复次数:27Top
1 楼zxyufan(宇凡)回复于 2001-11-19 22:39:21 得分 0
如果没错的话,那个很长的“数字”就是SessionID吧。知道一个客户端是怎样在服务器确定是哪个session文件的吗?Top
2 楼sandj(不了)回复于 2001-11-20 09:10:14 得分 0
这个是我的 session_check.php 感觉还是比较安全的
*********************************************
<?php
session_start();
?>
<LINK HREF="/include/style.css" REL="stylesheet" TYPE="text/css">
<?php
if(!(session_is_registered("USERNAME")))
{
echo "<script lanugage=\"javascript\">\n";
echo "alert ('对不起,请您首先登录!');\n";
echo "location=\"/\";\n";
echo "</script>";
exit();
};
?>Top
3 楼necro(寰愭檽鍏)回复于 2001-11-20 10:36:54 得分 0
非常关注Top
4 楼rosen(考试机器)回复于 2001-11-20 12:07:48 得分 0
谢谢sandj(不了)
我先试一下。Top
5 楼rosen(考试机器)回复于 2001-11-20 12:52:47 得分 0
还是不行,我是这样做的:
首先在登陆页面注册一个SID
session_start();
session_register("my_var");
然后进入check.php代码如下:
<LINK HREF="/include/style.css" REL="stylesheet" TYPE="text/css">
<?php
if(!(session_is_registered("my_var")))
{
echo "<script lanugage=\"javascript\">\n";
echo "alert ('对不起,请您首先登录!');\n";
echo "location=\"/\";\n";
echo "</script>";
exit();
}
else
{echo "成功登陆";
};
?>
但是当我把“http://localhost/check.php?PHPSESSID=e477d3728197fcb4bfd61c37409c327b”
复制下来,把IE关掉,再另外开一个,把URL粘贴上去,还是写着“成功登陆”。Top
6 楼hbolive(紫月亮)回复于 2001-11-20 14:04:23 得分 0
如果关掉IE,session是会过期的,必须重新登陆。看看你的程序判断流程是否有错??Top
7 楼rosen(考试机器)回复于 2001-11-20 14:13:13 得分 0
请 hbolive(紫月亮)
指点!Top
8 楼zxyufan(宇凡)回复于 2001-11-20 14:38:43 得分 0
PHPSESSID
意思这么明白的一个变量...Top
9 楼zxyufan(宇凡)回复于 2001-11-20 14:40:24 得分 0
你把这个变量的数据传给一个页面,告诉服务器,我要用PHPSESSID指向的session物理文件里的数据。他,他能找不到session的数据吗?Top
10 楼rosen(考试机器)回复于 2001-11-20 14:50:42 得分 0
楼上的老兄,拜托我学PHP才一个多星期。Top
11 楼rosen(考试机器)回复于 2001-11-20 15:05:55 得分 0
老兄,我给你一个URL,那上面说可以用直接调用"PHPSESSID=e477d3728197fcb4bfd61c37409c327b"的。
http://phpuser.com/tips_and_tricks/detail.php?id=45
Top
12 楼zxyufan(宇凡)回复于 2001-11-20 15:08:59 得分 20
嘿嘿~~~php中使用session的原理是就是这样的。服务器就是靠SessionID来确定哪个客户端是用哪个session文件里的数据的。当然这个SessionID可以靠cookie来保存,也可以直接在url中传递。你就是使用了后面这个方式来维持了server和client之间的通信。Top
13 楼rosen(考试机器)回复于 2001-11-20 15:12:21 得分 0
那么说“http://phpuser.com/tips_and_tricks/detail.php?id=45”里面说的肯定是错了?
谢谢你的指导。Top
14 楼zxyufan(宇凡)回复于 2001-11-20 15:13:33 得分 0
你到底有没有明白PHPSESSID是什么?
那篇文章我看了,跟你说的问题没有关系啊~Top
15 楼rosen(考试机器)回复于 2001-11-20 15:17:04 得分 0
就是服务器与浏览器之间建立的回话。Top
16 楼zxyufan(宇凡)回复于 2001-11-20 15:24:28 得分 0
是会话的标志,确定其一对一的关系。Top
17 楼rosen(考试机器)回复于 2001-11-20 15:30:56 得分 0
前几天才把数据库建好,这才开始接触PHP,所以难免说外行话,请原谅。
不过我想搞清楚“http://phpuser.com/tips_and_tricks/detail.php?id=45”和我现在的代码到底有什么区别?
我觉得一个只是用的是“echo "<script lanugage=\"javascript\">\n";”,而另一个用的是超链接。
请斑竹指点。Top
18 楼zxyufan(宇凡)回复于 2001-11-20 15:42:07 得分 0
没有本质上的区别。
关键是你复制url的时候不能把sessionID也复制下来,因为那样的话新开的ie和你本身那个就没有区别了。你提到的安全性是别人知道url,但是他能知道那么一大长串的sessionID数据吗?只要他猜不到那串字符,他就不能使用那个session里保存的数据呀~Top
19 楼rosen(考试机器)回复于 2001-11-20 15:50:53 得分 0
OK!!!Top
20 楼loveun(皋皋)回复于 2001-11-22 00:10:41 得分 0
to:zxyufan(宇凡)
你这样说有点误导,如果真想让session失效,可以用session_destroy()函数来结束,
那样即使他复制或者刷新也没有用。
还有点建议,做为斑竹要帮助大家尽量把问题搞清楚,我看你回答很多人的问题都很含糊!
(一点建议,希望不要生气)
Top
21 楼xtky_limi(窗外细雨)回复于 2001-11-22 12:38:58 得分 0
旁听Top
22 楼munn(印度象)回复于 2001-11-23 22:14:06 得分 0
关注Top
23 楼zxyufan(宇凡)回复于 2001-11-23 23:33:33 得分 0
我每次上线,能答的都答,这个工作两不算小,很多时候并不能很仔细的去思考。而且我并不认为我的回答是含糊的,如果我不确定,我都说明了是“可能的”。
PS 我没有生气~~另外谢谢你~~Top
24 楼zxyufan(宇凡)回复于 2001-11-23 23:38:10 得分 0
另外对于这个帖子涉及的问题,我说的是“问题所在”,你说的是“解决办法”。我想并不存在误导的问题。很多时候我并不想“一语道破天机”,特别是对新手,仅仅告诉他们错在什么地方,可以参考什么样的方法去解决,甚至连解决方法都不一定说。目的是为了留出让他们自己思考的空间,不然怎么才能让他们提高呢?Top
25 楼mrmengyi(miaomiao)回复于 2001-12-08 17:20:11 得分 0
我也有类似的困惑
在IE关闭时Session文件(服务器上的)并没有被删除
需要在脚本中执行session_destory()
why?
ASP就不用
是不是因为用的是CGI方式?Top
26 楼mrmengyi(miaomiao)回复于 2001-12-10 15:14:28 得分 0
你的sessionID用的是url传递的
这样可以防止客户机不支持cookie的情况
服务器上的session存储是有时间限制的
安全你不用担心
用session_destory可以显式的把服务器上的session文件删除Top




