2013-04-07 66 views
0

我遇到了問題。 我已經創建了一個Web應用程序,其中人員登錄並設置了許多$ _SESSION [...]。 我發現奇怪的一點是,如果我登錄的文件夾http://demo.site.com/在我登陸後http://webapp2.site.com我得到兩個web應用程序混合起來的會話數據...PHP處理會話和Cookie不同的文件夾

這是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

+0

http://php.net/manual/en/function.session-定義save-path.php – zerkms

+0

請你詳細解釋一下嗎?混淆你的意思是什麼? – Nickool

+1

這個問題有關於這個問題的一些很好的見解:http://stackoverflow.com/questions/1064243/php-sessions-across-sub-domains – aurbano

回答

1

您可以使用預先標題爲所有會話變量,並在每個Web應用程序更改前標題。

APP1

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

APP 2

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

$預可在config.php

+0

Bravissimo!這是一個很好的。 Tks,我會嘗試並讓你知道。 session_destroy()呢? 因爲如果我從其中一個註銷,我會從另一個註銷,因爲會話被破壞... P.S:您認爲這會導致安全問題嗎? –

+0

你可以使用session_unregister($ pre.'var1'); session_unregister($ pre.'var2' ); ,...從每個應用程序註銷。 –

+0

好的,因爲我有很多會話變量是否有辦法讓他們全部@一次? (或許session_unregister($ pre。'*'); ????) –