PHP 会话处理错误

2022-08-30 15:32:34

我在文件的最顶部有这个:send.php

ob_start();
@session_start();

//some display stuff

$_SESSION['id'] = $id; //$id has a value
header('location: test.php');

以下是我测试的最顶部.php文件:

ob_start();
@session_start();

error_reporting(E_ALL);
ini_set('display_errors', '1');

print_r($_SESSION);

当数据发送到 时,将显示以下内容:test.php

Array ( )

警告:未知:打开(/var/lib/php/session/sess_isu2r2bqudeosqvpoo8a67oj02,O_RDWR)失败:第 0 行的“未知”中的权限被拒绝 (13)

警告:未知:无法写入会话数据(文件)。请验证 session.save_path 的当前设置是否正确(/var/lib/php/session)在第 0 行的“未知”

我尝试过只使用session_start();但结果是一样的。


答案 1

查看您的留言

因此,它与权限相关的第一件事

open(/var/lib/php/session/sess_isu2r2bqudeosqvpoo8a67oj02, O_RDWR) 失败: 权限被拒绝 (13) 在第 0 行的“未知”

你必须检查文件权限更改模式这个/var/lib/php/session/

它涉及的第二件事session.save_path

警告:未知:无法写入会话数据(文件)。请验证 session.save_path 的当前设置是否正确(/var/lib/php/session)在第 0 行的“未知”

在 php 中.ini

[Session]
; Handler used to store/retrieve data.
session.save_handler = files

; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
; 
; As of PHP 4.0.1, you can define the path as:
; 
;     session.save_path = "N;/path"
; 
; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories. This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
; 
; NOTE 1: PHP will not create this directory structure automatically.
;         You can use the script in the ext/session dir for that purpose.
; NOTE 2: See the section on garbage collection below if you choose to
;         use subdirectories for session storage
;
session.save_path = /tmp/    <= HERE YOU HAVE TO MAKE SURE

; Whether to use cookies.
session.use_cookies = 1

答案 2

您必须将设置更改为可访问的目录,例如session.save_path/tmp/

如何更改:http://php.net/session_save_path

在共享主机上,建议在主目录内设置会话保存路径,但位于文档根目录下方

另请注意

  • 在这里使用ob_start是不必要的,
  • 我敢肯定你把@操作员是偶然的,已经永远删除它,不是吗?

推荐