我在我的网站上创建了两个不同的目录,如下
my_site.com/boo
和
my_site.com/koo
我已经上传了以下两个测试脚本(3个文件)
1.php//输入表单
<?PHP
session_start();
echo $_SESSION['msg'];
unset($_SESSION['msg']);
?>
<form method="post" action="2.php">
<input name="loginid" type="text" id="loginid">
<input type="Submit" name="Submit" value="Login"/>
</form>
2.php//检查登录是否正确(将我发送到3.php)如果不正确,则返回1.php
<?PHP
session_start();
$loginid=$_POST['loginid'];
if ($loginid="okay") {
$_SESSION['loginid'] = "logged";
header("Location: 3.php ");
exit;
} else {
$_SESSION['msg'] = "Wrong";
header("Location: 1.php ");
exit;
}
?>
3.php//如果记录正确,它应该向管理员发出Hello。
<?PHP
session_start();
if ($_SESSION['loginid']) {
echo "Hello To Admin";
} else {
$_SESSION['msg'] = "Please Login";
header("Location: 1.php ");
exit;
}
?>
现在我的问题
如果我转到my_site.com/boo/1.php
并正确登录然后一旦我转到my_site.com/koo/3.php
,它就会给我消息Hello to admin
,就好像我已经登录了一样,这意味着如果我在网站上的两个不同目录上使用相同的php骨架有两个不同的脚本,那么我就可以同时登录到这两个目录!!为什么不是独一无二的。
这会伤害我,就好像我的网站上有相同的脚本和不同的目录,我真的不想访问所有的:)
我有一个主意,但不确定是否正确,所以请给我建议。
我将添加检查文件(2.php)随机代码
<?PHP
session_start();
$loginid=$_POST['loginid'];
if ($loginid="okay") {
$random = rand(1, 1000000);
$_SESSION['loginid'] = "".$random.""; // random
header("Location: 3.php ");
exit;
} else {
$_SESSION['msg'] = "Wrong";
header("Location: 1.php ");
exit;
}
?>
所以有什么帮助吗~感谢
会话不限于目录或文件,它是共享来自同一用户的数据的一种方式。。。它意味着以这种方式工作
会话ID使用cookie发送。
Cookie是基于域名的,因为您的网站位于同一个域,所以它们也共享PHPSSID Cookie。
启动会话时,请尝试首先使用命名http://us.php.net/manual/en/function.session-name.php
阅读此了解更多信息:
http://php.net/manual/en/session.security.php
您可以使用session_name()。这将使$_SESSION变量连接到会话名称,而不是全局会话上下文。
文件:http://se.php.net/manual/en/function.session-name.php
第1页:
session_name('first_page');
session_start();
$_SESSION['hello'] = "hi";
第2页:
session_name('second_page');
session_start();
// will generate false
var_dump(isset($_SESSION['hello']));
使用session_name()
创建唯一会话:
/koo:
session_name('koo');
session_start();
/foo:
session_name('foo');
session_start();