Php会话重命名问题

时间:2012-06-22 23:03:23

标签: php

我有这个简单的问题。

我有这部分代码设置我的会话:

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' );
?>

我需要更改会话名称,因为我已经有了这样的名字。

由于

2 个答案:

答案 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'];

实际上,这只是一个会话,因为单个浏览器一次只能为您的网站打开一个会话。

仔细考虑您认为自己需要这个的原因。这可以维护吗?您的代码是否易于理解?也许你需要退后一步思考你的系统设计?