Php 会话不适用于www

Php 会话不适用于www,php,Php,好的,这是我的问题: 当一个用户登录到我的站点时,我会将他们的所有用户信息放入这样的会话中 session_start(); //Put all user info into session cookie $_SESSION["login"] = 'true'; $_SESSION["id"] = $user_info['id']; $_SESSION["firstname"] = $user_info['firstname']; $_SESSION["lastname"] = $user_in

好的,这是我的问题: 当一个用户登录到我的站点时,我会将他们的所有用户信息放入这样的会话中

session_start();
//Put all user info into session cookie
$_SESSION["login"] = 'true';
$_SESSION["id"] = $user_info['id'];
$_SESSION["firstname"] = $user_info['firstname'];
$_SESSION["lastname"] = $user_info['lastname'];
$_SESSION["screen_name"] = $user_info['screen_name'];
$_SESSION["facebook"] = $user_info['facebook'];
$_SESSION["email"] = $user_info['email'];
$_SESSION["date_joined"] = $user_info['date_joined'];
$_SESSION["account_type"] = $user_info['account_type'];
$_SESSION["account_active"] = $user_info['account_active'];
$_SESSION["hashed_password"] = $user_info['hashed_password'];
问题是,如果他们从www.domain.com登录,然后出现在domain.com的页面上,或者从domain.com登录,然后出现在www.domain.com的页面上,则会话中存储的信息不可用

无论他们是否使用www登录,我如何获得会话信息

@格罗斯曼先生

这样做是否合适:

    <?php
    //Ok I modified the code so I don't get the undefined errors I was getting

//OLD CODE
    //$currentCookieParams = session_get_cookie_params(); 
    //$rootDomain = '.domain.com'; 
    //session_set_cookie_params( 
        //$currentCookieParams["3600"], 
        //$currentCookieParams["/"], 
        //$rootDomain, 
        //$currentCookieParams["false"], 
        //$currentCookieParams["false"] 
    //); 

    //session_name('mysessionname'); 

//NEW CODE
    $rootDomain = '.beckerfamily1.com'; 
    session_set_cookie_params( 3600, '/', $rootDomain, false, false); 
    session_start();

    if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 2700)) {
        // last request was more than 45 min ago
        if(isset($_SESSION['id'])){
        $connection = mysql_connect('localhost', '******', '*******');
        if (!$connection){
            die('Database connection failed: ' . mysql_error());
            }
        $db_select = mysql_select_db('beckerfamily');
            if(!$db_select){
                die('Could not select database: ' . mysql_error());
                }
        $query = "UPDATE users SET online='no' WHERE id='{$_SESSION['id']}' LIMIT 1";
        $result = mysql_query($query);
        if (!$result) {
                die("Database query failed: " . mysql_error());
            }
        }
            $_SESSION = array();
            if(isset($_COOKIE[session_name()])) {
                setcookie(session_name(), '', time()-42000, '/');
            }
        session_destroy();   // destroy session data in storage
        session_unset();     // unset $_SESSION variable for the runtime
        if(isset($connection)){
            mysql_close($connection);
            }
     }
    $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
    ?>

我不确定您使用的是什么语言,但您需要更改会话cookie的“域”属性。如果将cookie域设置为“domain.com”,则可以在“domain.com”和“www.domain.com”上访问该域。

cookie(如PHPSESSID cookie)仅在其设置的域上可用。您可以使域包含所有子域:

ini_set('session.cookie_domain', '.example.com' );
或者,如果配置不允许您覆盖它

$currentCookieParams = session_get_cookie_params(); 

$rootDomain = '.example.com'; 

session_set_cookie_params( 
    $currentCookieParams["lifetime"], 
    $currentCookieParams["path"], 
    $rootDomain, 
    $currentCookieParams["secure"], 
    $currentCookieParams["httponly"] 
); 

session_name('mysessionname'); 
session_start(); 


更好的方法是选择是否希望通过
www
访问您的站点,并将所有请求重定向到另一个站点。

可能重复的可能重复的可能重复的是,这就是您要做的,但您将真正的域放在它显示
domain.com
的位置。不要删除前导句点,这很重要。在尝试运行代码时出现此错误:注意:第5行J:\www\www.beckerfamily1.com\testing\login.php中的未定义索引:3600。我想也许我需要删除引号,但仍然没有工作。我修复了代码,所以我不再得到错误,但不幸的是,它没有解决我最初的问题,即当用户在url中使用www时,会话信息不可用。这是一个令人难以置信的问题。如果我认为它不起作用,为什么我要写它来回答你的问题?对不起,这个网站没有让我完成我要写的东西。我试图发布一段代码后,我将这个工作问题。这让我很沮丧,我试图写一段代码,但它说我的字符太多了。@Dan也许他认为答案是邪恶的Dan写的。你知道,那个有goatee@David不要在评论中发布代码。改为编辑您的问题