问题标签 [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 投票
1 回答
2041 浏览

php - 设置 php 会话 (session_set_save_handler)

我正在尝试使用 php 和 mysql 设置用户登录/注销系统。我在这里找到了一些关于这个主题的文档:http: //phpmaster.com/writing-custom-session-handlers/。我正在尝试跟随它(我也一直在从其他来源中提取信息 - 但这是主要来源)。

这是我的一些来自“my_session_handler.php”的代码:

我的问题是,我上面引用的示例中的“$path”和“$name”变量来自哪里?我将它们声明为私有变量,并使用一些函数来做我认为需要做的事情。但是在我关注的网站上 - 这些变量都没有被声明 - 以及 $sessionId。我看到读取函数返回 $data。所以我在“写”函数中使用它,如下所示:

我这样做对吗?

0 投票
1 回答
1089 浏览

php - PHP session_set_save_handler 不保存到数据库

我创建了一个类来将会话数据保存到数据库中。它没有保存到数据库中,也没有错误。知道为什么吗?这是课程。

会话包含在 init.php 文件中。它是这样称呼的。

0 投票
0 回答
328 浏览

php - 在没有 session_set_save_handler() 的 PhP 中实现数据库驱动的会话管理

我正在考虑在 PhP 中实现数据库驱动的会话管理,并阅读了 session_set_save_handler 函数来指定要在不同的基于会话的事件上触发的回调。还有实现接口的选项。事实上,如果你用谷歌搜索,就会有很多信息。我陈述这一切是因为我的问题不是如何使用 session_set_save_handler() 来实现数据库驱动的会话管理解决方案,而是如何在不使用它的情况下实现相同的功能。

我想知道为什么要通过 session_set_save_handler 呢?中间方法怎么样?只需使用 PhP 中的会话处理来获取会话 id,然后使用它作为键,就可以对会话变量实现完整的 CRUD 功能(当然,不连接到 $_SESSION 数组)。例如,使用 $_DBSESSION 中的另一个关联数组。会话启动后,获取会话 ID 并使用此键检索 DB 中的所有行并填充 $_DBSESSION 数组,当会话关闭时,该数组被转储,每个数组索引一条记录在第一次删除所有数据后进入数据库表具有该会话 ID 的条目。这种写入数据库的功能可以在 register_shutdown_function() 中,因为它是在程序退出时最后完成的。

这样一来,人们也可以按照惯例使用内置的 $_SESSION 数组以及 $_DBSESSION 方法。这听起来比使用 session_set_save_handler() 简单得多。此外,根据 cookie 接口的实际会话创建仍然由 PHP 的会话管理负责。

问题:我在正确的轨道上吗?这有意义吗?

0 投票
1 回答
418 浏览

php - 没有 session_set_save_handler() 的基于数据库的会话类/库

我目前正在编写一个 PHP '插件' 来跟踪跨唯一域的会话。为了做到这一点,我想出处理跨不同域的“会话”的最佳方法是编写我自己的会话类/库。

我考虑过使用session_set_save_handler()which 通常是一种很好的方法。但是,我担心将安装此 PHP 插件的许多 Web 应用程序可能已经有自己的使用session_start()和 PHP 会话,我怀疑这可能session_set_save_handler()会破坏一些东西 - 所以我不愿意用那个。

在我开始重写我自己的 MySQL PDO 数据库会话库之前,我想知道是否已经存在类似的东西,所以我不打算重新发明轮子?我在谷歌上快速浏览了一下,我只能看到那些使用session_set_save_handler()我提到的禁止使用的。

以下是我已经发现的一些我已经排除的:

PHP-MySQL-Session-Handler https://github.com/sprain/PHP-MySQL-Session-Handler

被拒绝,因为它使用session_set_save_handler(..)并因此将强制 Web 应用程序的其余部分以相同的方式将会话保存到 MySQL(由于上述原因,我不希望这样做。)

斑马会议 https://github.com/stefangabos/Zebra_Session

这看起来很有希望但被拒绝了,因为它也使用session_set_save_handler(..)

提前致谢。

0 投票
1 回答
239 浏览

php - 会话变量不会在 php 中使用 MongoDB 保留下一页上的值?

我正在用 PHP 和 MongoDB 实现一个简单的会话管理器。但不知何故$_SESSION,下一页上是空的,但在第一页上分配了值..

接下来我创建了 2 个新脚本来测试这个sessionManager Mongo_session1.php

Mongo_session2.php

如果你之前也遇到过同样的问题,并且得到了解决方案,那对我学习 MongoDB 和 PHP Web 开发会很有帮助。先感谢您。

0 投票
1 回答
278 浏览

php - session_set_save_handler() 带会话超时

我目前有一个包含session_set_saver_handler它工作正常的类。但是我想实现一个会话超时,这会导致比最初预期的更多的问题。

据我所知,会话生命周期如下;

  • 打开

然后调用session_destroy()将运行_destroy(),这将运行我设置的配置。

该类直接写入数据库以存储我的会话。该数据库包含以下列;

  • 会议; 包含 sessionID
  • 数据; 包含会话的数据
  • 更新时间;包含会话的最后一个活动
  • 锁定;默认为假。但是,如果$variable<$access这设置为 true

所以,目前我有以下内容;

但是,当条件为真 ( $row['updatedTime'] < $timeout) 时,它会运行session_destroy,因为它依赖于传递给类的数据库对象,这在session_destroy运行时会被破坏,这意味着没有活动的数据库连接。好吧,据我所知,这是正在发生的事情。我可能完全理解错了。

30 秒超时仅用于测试目的。好的,所以我要的是当会话的最后一个活动超过当前设置的超时时,它需要销毁会话并将locked列设置为true.

谢谢!

0 投票
1 回答
920 浏览

php - 警告:session_set_save_handler() 期望参数 1 是 SessionHandlerInterface,给定对象

我在很多地方都没有找到解决这个问题的方法。我完全不知所措,我是修改会话并尝试实现安全会话接口和会话处理程序的新手。我得到的错误是

警告:session_set_save_handler() 期望参数 1 是 SessionHandlerInterface,对象在 C:\wamp\www\SecSessionHandler.php 第 124 行给出。

很抱歉,很长的帖子!

这是两个各自的文件:

SecSession.php:

SecSessionHandler.php:

0 投票
3 回答
51 浏览

php - Session_id 行为怪异

所以我有 SessionHandler 类,以及我的另一个文件,它像这样 ( cfg_session.php ):

好吧,小的区别是在我的 localweb 中我使用:

因为,在我的本地网络中,它实际上是 PHP > 5.5。

它在我的本地网络上运行良好,我确实刷新页面,注销,登录,关闭选项卡,打开选项卡,再次登录,一切正常,我浏览器中的 PHPSESSID 等于在会话文件上创建的那个,所以在。

编辑:我有一个 PHP < 5.4 的服务器,事实上,我使用上面的代码,意味着 PHP < 5.4,但它仍然表现得很奇怪。刷新浏览器,它会创建另一个会话文件,但不会更改 PHPSESSID。第一次尝试登录时,过程如下:它创建会话文件,我将用户重定向到某个页面,该页面在服务器上执行另一个请求,它只是创建另一个与 PHPSESSID 完全不同的会话文件,当然,该应用程序将我注销。这就是奇怪的部分。

但是后来,我尝试再次正常登录,它让我登录,就好了。每个请求都具有相同的 ID,session_regenerate_id() 工作正常,一切正常,PHPSESSID 与创建的会话文件匹配。

但是,如果我注销,关闭该选项卡,打开一个新选项卡并尝试登录(或者只是关闭选项卡而不注销),它只会做同样的事情:让我登录,创建一个会话文件,但随后,它会改变de session_id 再次将我踢出去。

我真的坚持这一点。不能确定这是因为 PHP < 5.4 还是其他原因。

注意: - session_regenerate_id() 用于登录检查是否有会话(然后更新时间和 regenerateId)和注销

  • 在需要使用会话变量的每个页面上都需要一次 cfg_session.php 。

我需要对此有所了解。我已经看到了很多主题,但没有一个非常有用或接近解决这种奇怪的行为。提前致谢。

0 投票
1 回答
591 浏览

php - PHP 致命错误 SessionHandlerInterface

我正在尝试在 PHP 中实现一个自定义 SessionHandler,它使用事务通过数据库处理会话。

但问题是我不断收到致命错误,关于该函数为空。

致命错误:在 null 上调用成员函数 begin_transaction()
致命错误:在 null 上调用成员函数 commit()

如果我注释掉前两个,我会得到:
致命错误:在 null 上调用成员函数 prepare()
致命错误:在 null 上调用成员函数 close()

等等等等。

现在显然,您会认为我忘记启动与数据库的连接。好吧,令人惊讶的是,我没有。

在我启动 MysqlSessionHandler 函数之前,一切都很顺利。 注意:我还没有插入回滚功能,因为我仍然忙于找出错误。

0 投票
1 回答
459 浏览

php - PHP 自定义会话处理程序

我在自定义会话类中使用 session_set_save_handler 来使用数据库存储。我已经使用数据库会话存储一年多了。这一直运行良好,我几乎一年前编写的验证码也是如此。我现在遇到的问题是验证码不再输出图像。如果我将 require_once 删除到会话类,则会输出图像,但代码会保存为单独使用 session_start 而不是与自定义类一起使用。如果我需要会话类,则不显示图像,但按预期编写代码。我已经使用相同的代码将近一年了,没有任何问题。我完全不知道发生了什么。

调用方法:

图片标题: