0

我正在使用 Kohana 3 框架,并且正在使用本机会话驱动程序。

出于某种原因,有时会话无法写入其文件。

Warning: session_start() [function.session-start]: open(/tmp/sess_*****, O_RDWR) failed: Permission denied (13) in /home/site/public_html/system/classes/kohana/session/native.php  on line 27

我很确定 Kohana 有自己的内置错误处理程序,但它不会被这个错误触发(即它显示为正常的 PHP 错误,而不是 Kohana 错误)。

PHP 错误
(来源:alexanderdickson.com

任何曾经使用过 Kohana 的人都会注意到这似乎绕过了 Kohana 的错误处理(可能设置为set_error_handler())。

无论如何,如果不从本机会话(即基于文件的)驱动程序切换,是否可以阻止此错误的出现

我是否应该在 Kohana 的核心代码中进行良好的引导并在前面添加一个@错误抑制器?session_start()我应该放松error_reporting()吗?

谢谢

4

3 回答 3

5

您在 bootstrap.php 中调用ini_set('session.save_path', APPPATH.'sessions')(替换APPPATH.'sessions'为您想要的目录)以强制将会话写入application/sessions. 这将提高使用本机会话的安全性,并且应该可以解决您的问题。

于 2010-05-14T09:20:28.297 回答
1

这取决于 php 的 session.save_path 指令,您可以将其覆盖到 php.ini 中的某个可写文件夹中,或者您可以在 .htaccess 中尝试此操作;

 php_value session.save_path '/path/to/folder/you/can/write'

编辑:为了不要忘记,将您的自定义会话文件夹级别放在 htdocs/public_html/whatever 之下。

虽然,所有这一切都有点过头了,因为您可以礼貌地要求您的服务器管理员检查权限有什么问题。

于 2010-05-12T23:35:23.650 回答
0

这意味着您的 php 解释器在 /tmp 中没有写入权限。请您的服务器管理员解决这个问题 - 它与您的应用程序无关。

如果来自不同 php 进程(在不同用户下运行)的会话文件发生冲突:给他们不同的会话临时目录会有所帮助。例如,您可以将它们从 /tmp 移到 /path/to/homedir/phptmp 并使用如下结构:

/path/to/homedir/
/path/to/homedir/htdocs
/path/to/homedir/phptmp
/path/to/homedir/logs
于 2010-05-12T23:29:20.027 回答