问题标签 [session-set-save-handler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3228 浏览

php - PDO 准备静默失败

我正在试验 PHP session_set_save_handler,我想使用 PDO 连接来存储会话数据。

我有这个函数作为写操作的回调:

前两条日志消息总是显示出来,但紧随其后的第三条$stmt = $GLOBALS['db']->prepare($sql)从未出现在日志文件中,也没有异常的痕迹。

会话数据库表保持为空。

来自回调的日志消息_close始终存在。

这是我连接到数据库的方式:

我有 PHP 5.2.10。

我试图简单地运行$GLOBALS['db']->exec($sql)“手动准备”的$sql内容,但它仍然默默地失败了。查询本身没问题,我可以通过 db 控制台执行它。


编辑:

在 VolkerK 确定问题后,我发现这篇文章解释了这种奇怪现象背后的原因。也许它也可以为其他人提供信息。


第二次编辑:

最不痛苦、最神奇的解决方案是我必须将以下函数调用添加到我的前端控制器(主 index.php)文件的最后:

0 投票
1 回答
746 浏览

mysqli - 使用数据库中保存的会话时 PHP mysqli->real_escape_string

好的,我希望在发布这个问题之前我已经很好地列出了所有内容,因为我在这里和那里找到了一些解决方案,但对我的问题没有真正的答案。

1:我使用的是与mysqli的单例MySQL连接,而不是使用存储过程;

2:我在网上找到了解释session_set_save_handler的代码,并将其嵌入为一个名为MySqlSessionStore的类;

3:在我的数据库类中有这个公共函数:

$this->_link = new mysqli($host, $user, $password, $database)

4:$db = MySQL::getInstance(array(DB_SERVER, DB_USER, DB_PASS, DB_NAME)); 这就是我调用静态数据库函数的方式(这里没什么特别的)

问题:一切正常,直到我取消注释$id = $db->escapeStringForDB($id);,然后发生以下错误:

在非对象上调用成员函数 real_escape_string()

MySqlSessionStore 中的示例代码:

其他问题,备注:

  • 我正在使用 session_regenerate_id() 但显然这需要使用 session_set_save_handler 删除;
  • 我到底应该放在session_write_close();哪里?我已经在我的 db 类的析构函数中得到了它,但也许这不是要走的路;
  • 我在其他项目上使用它并没有伤害,但这里会话处理程序的行为似乎不同并且让我感到困惑:)

在此先感谢您,如果您需要更多信息,我很乐意提供。

0 投票
3 回答
175 浏览

php - PHP:会话死亡更改数据库

我正在为一个项目使用 PHP。我已将会话寿命设置为 0,以便当用户关闭浏览器时,会话终止并且他/她被注销。但是,我在数据库中有一个状态变量,它存储告诉我用户是否登录的信息。我用它来通知其他用户特定用户的状态。

当会话结束时,我如何调用一个函数来改变我的数据库中的值?我看过覆盖 session_set_save_handler()。但这需要我重写整个函数并定义我自己的会话。是否有一个函数可以用来更改我的数据库变量?

有没有更好的方法来实现我想要实现的目标?

谢谢

编辑:对于那些和我一样情况的人,我按照尼克的建议做了。我有一个日志,可以跟踪每个用户访问的每个页面。为了检查用户是否在线,我检查我的数据库以检查是否设置了登录变量,然后仔细检查最近是否有一些活动以了解用户是否实际在线。

0 投票
2 回答
2693 浏览

php - session_set_save_handler - 为什么这段代码不起作用?

我一直在尝试将 PHP 会话数据保存在 MySQL 数据库中,但无法正常工作。

举个简单的例子,这里的代码应该在每次访问时增加一个计数器。我看过其他示例等,但有人可以告诉我为什么这段代码不起作用吗?(Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 MySQL客户端版本:5.0.51a)

这是mysql数据库表:

和 PHP 代码(只需插入您的数据库凭据):

在此先感谢您的帮助。

如果您注释掉 session_set_save_handler 代码行,它可以正常工作(它会增加)。但是使用保存处理程序却没有。

0 投票
2 回答
1322 浏览

php - 什么样的序列化使用PHP函数session_set_save_handler的write函数?

我使用 session_set_save_handler()。它工作正常。但是,有时我需要更改用户的会话数据。我只是希望传递给 write 函数的会话数据是在内部创建的,如下所示:

但他们不是。它们的格式与简单的 PHP 序列化数据略有不同:

任何人都知道内部使用哪种序列化来序列化 $_SESSION 数据以用于 session_set_save_handler() 中的写入函数?或者更好的是,如果有一些我可以用来处理这些数据的反序列化和序列化函数?

0 投票
1 回答
2554 浏览

php - 在 sql 中存储会话 (session_set_save_handler())

所以,我正在制作一个登录系统,用户应该登录超过 24 分钟。这就是为什么我决定将会话存储在我的数据库中。
我使用了这个函数:(我建立了自己的 sql 连接 -> sqlConnectionConfig.php)
sessions.php 文件(我在 php.net 上找到了这段代码。):



我的 admin/index.php 和 admin/admin.php 文件都具有相同的 session_start():

index.php 包含表单并通过 post 将登录数据发送到 admin.php。
问题是:它会在 24 分钟后注销。但我不知道为什么,我的数据库成功存储了会话。

0 投票
0 回答
1393 浏览

php - 数据库的 session_set_save_handler 类不工作

在学习了一些教程之后,我正在使用 session_set_save_handler 类并尝试将会话数据存储在 mysql 数据库中。

我已经包含并实例化了我的类文件:

我的类文件的代码是:

但我无法弄清楚为什么它不起作用。

编辑:不工作,我的意思是没有任何东西被添加到数据库中。

0 投票
1 回答
983 浏览

php - php/mongodb 会话管理器,session_set_save_handler() 问题

我正在使用一个 PHP 会话管理器类来处理 MongoDB 中的用户会话,但它不起作用,我终生无法弄清楚原因。会话变量设置成功,但不会持续到其他页面。与 MongoDB 的连接不是问题。我已经确定这个问题与 . session_set_save_handler,因为如果我注释掉这个函数,原生 PHP 会话处理工作正常。

在此先感谢您的帮助。

0 投票
2 回答
2812 浏览

php - session_set_save_handler 不工作

我一直在尝试使用 session_set_save_handler() 设置保存会话,但我不知道出了什么问题,我有所有可调用的函数,但是出了点问题,在这里我发布了我的代码。顺便说一句,我在 WP 工作。

因此,出于某种原因,如果:

它正在返回无法设置会话处理程序。谢谢您的帮助!:D

0 投票
1 回答
3264 浏览

php - session_set_save_handler 并写在 php 5.4.12

我正在使用session_set_save_handler()将会话保存到数据库。

从 php v.5.3 迁移到 v.5.4 后,该write()函数根本没有被调用;无论是在调用session_write_close()函数时,还是在脚本终止时(之前它工作正常,并且没有对代码进行任何更改)。和函数仍照常调用read()。 我知道 php 5.4 中有一些与机制相关的变化。有没有人有类似的问题或知道发生了什么变化?open()close()

session_set_save_handler()

用法:

对不起,代码中的一些调试。