0

我有问题。我创建了一个网络应用程序,该人登录并设置了许多 $_SESSION[...]。我发现奇怪的一点是,如果我登录文件夹http://demo.site.com/并登录http://webapp2.site.com,我会在两个 Web 应用程序中混淆会话数据...

这是 checkentry.php 中的代码(在将其发送到主页之前检查人员是否已登录:

<?php
session_start();
    if(isset($_SESSION['autenticated']) && $_SESSION['autenticated'] == TRUE && isset($_COOKIE["login"]) && $_COOKIE["login"] == $_SESSION['ssnid']){
        if (!isset($_SERVER['HTTPS']) ){
            //header('Location: https://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"].'');
        }   
        return true;
    }else{
        require_once("config.php");
        $logout_connect = mysql_connect($db_host, $db_user, $db_pass);
        if (!$logout_connect){
            die('Impossibile connettersi: ' . mysql_error());
        }else{
            mysql_select_db($db_name, $logout_connect);
            mysql_query("DELETE FROM sessions WHERE ssnid = '".$_SESSION['ssnid']."' AND userid = '".$_SESSION['userid']."'");
            setcookie("login", "", time()-3600);
        }
        session_destroy();
        header("location: login.php?requested");
    }
?>

所以问题是,如果我在两个 Web 应用程序中都登录(并且在同一个域中在不同的文件夹中有许多 Web 应用程序),我会得到混合的 $_Session 数据。

[编辑] 当我从 app1.site.com 注销时,我也会从 app2.site.com 注销......

我做错了什么以及如何解决?

Tku

4

1 回答 1

1

您可以为所有会话变量使用前置标题,并在每个 Web 应用程序中更改前置标题。

APP1

$pre = "app1";
if(isset($_SESSION[$pre.'autenticated']) && $_SESSION[$pre.'autenticated'] == TRUE) {}

APP2

$pre = "app2";
if(isset($_SESSION[$pre.'autenticated']) && $_SESSION[$pre.'autenticated'] == TRUE) {}

$pre 可以在 config.php 中定义

于 2013-04-07T12:33:26.727 回答