我有这个简单的问题。
我有这部分代码设置我的会话:
if($count==1){
// Register $myusername, $mypassword and redirect to file "admin.php"
session_register("admin");
session_register("password");
$_SESSION['name']= $myusername;
header("location:index.php");
}
这就是我在每个文件中加入来保护它:
<?php
session_start(); //Start the session
define(ADMIN,$_SESSION['name']); //Get the user name from the previously registered super global variable
if(isset($_SESSION['admin'])){//If session not registered
header("location:login.php"); // Redirect to login.php page
}
else //Continue to current page
header( 'Content-Type: text/html; charset=utf-8' );
?>
我需要更改会话名称,因为我已经有了这样的名字。
由于
答案 0 :(得分:2)
首先,停止使用session_register()函数,自PHP 5.4.0起,它已被弃用和删除。
你应该写下面的第一部分:
if($count==1){
// Register $myusername, $mypassword and redirect to file "admin.php"
$_SESSION['admin'] = $admin;
$_SESSION['password'] = $password;
$_SESSION['name'] = $myusername;
header("location: index.php");
}
分析第二部分,if/else
逻辑被反转。这是正确的逻辑。
session_start(); //Start the session
//Get the user name from the previously registered super global variable
define(ADMIN, $_SESSION['name']);
if( isset($_SESSION['admin']) )
{
//Continue to current page
header( 'Content-Type: text/html; charset=utf-8' );
}
else
{
//If session not registered
header("location:login.php"); // Redirect to login.php page
}
答案 1 :(得分:1)
您可以通过在$_SESSION
中存储数组来为同一浏览器创建两个会话的错觉:
$adminsession = array();
$adminsession['admin'] = ...;
$adminsession['name'] = ...;
$subadminsession = array();
$subadminsession['admin'] = ...;
$subadminsession['name'] = ...;
$_SESSION = array('adminsession' => $adminsession,
'subadminsession' => $subadminsession);
在下一页:
$adminsession = $_SESSION['adminsession'];
$subadminsession = $_SESSION['subadminsession'];
实际上,这只是一个会话,因为单个浏览器一次只能为您的网站打开一个会话。
仔细考虑您认为自己需要这个的原因。这可以维护吗?您的代码是否易于理解?也许你需要退后一步思考你的系统设计?