首页 > 解决方案 > 无法访问会话数据 session_write_close

问题描述

我遇到了会话文件被锁定的问题,所以我在完成会话后添加了 session_write_close()。该脚本在此之前可以正常工作,但是,一旦我现在离开登录页面,会话就为空白。

会话在 index.php 的顶部开始,其中包括登录页面:

$result = 'token_valid';
$_SESSION['user'] = $email;
print_r($_SESSION);
session_write_close();
print_r($_SESSION);

会话数据在登录页面上两次都正确返回。

Array ( [user] => abc@gmail.com ) Array ( [user] => abc@gmail.com )

一个链接返回到主页,它调用一个函数来检查是否登录...

function user_is_signed_in() {
    print_r($_SESSION);
    session_write_close();

    if($user == '') {
        return False;
    }
    else {
        return True;
    }

}

会话不再有任何数据。

完整的 index.php

<?php 

session_start();

include_once('fnc/database.php');
include_once('fnc/user.php');

if(!user_is_signed_in()) {
  include('sign-in.php');
}
else {
  $url = parse_url($_SERVER['REQUEST_URI']);
  if(!$url['query'])
  {
    include('home.php');
  }
  else {
    if(isset($_GET['media']))
    {
      include($_GET['media'].'.php');
    }
    if(isset($_GET['user']))
    {
      include($_GET['user'].'.php');
    }

  }

}

.

.

解决方法(可能很脏)

问题似乎是由实际会话文件的读/写引起的。使用 PHP 生成的 session_id 并刚刚创建了一个辅助会话文件。不要保存在同一个文件夹中(或者如果这样做,请更改文件名)- session_start 似乎删除并重新生成 PHP 管理的会话文件,您将丢失那里写入的所有数据。

session_start();
$sess = array();
$sess = $_SESSION;
$sess["id"] = session_id();
//print_r($sess);
session_write_close();

在会话文件夹中创建 session_data

        $session_details = "user|".$email;

        $session_file = "/Programs/XAMPP/tmp/session_data/sess_".$sess["id"];
        //echo $session_details;

        $fh = fopen($session_file, 'w+');
        fwrite($fh, $session_details);
        fclose($fh);

从此文件而不是会话中读取会话数据

    $session_path = "/Programs/XAMPP/tmp/session_data/sess_".$sess["id"];
    $fh = fopen($session_path, 'r');
    $session_file = fread($fh, filesize($session_path));

    $exploded_session = explode("\n", $session_file);

    $session_data = array();

    foreach($exploded_session as $line)
    {
        $tmp = explode("|", $line);
        $session_data[$tmp[0]] = $tmp[1];
    }

    return $session_data["user"];

    fclose($fh);

标签: php

解决方案


推荐阅读