2010-05-17 43 views
0

UPDATE(新增的代码,做读/写类)PHP会话只写入部分信息表

更新:我已经注释掉了在PHP行。 ini文件允许会话被写入文件而不是数据库,并且我将session_start()放在正确的位置上。所以我已经能够排除其他地方的代码。只有在使用数据库存储会话时才会出现此问题,这是一项要求,所以如果有任何其他想法可以帮助我解决此问题,请告诉我。谢谢。


原贴: 我有困难,搞清楚发生了什么事情就到这里,希望有人能帮助我。

我一直在使用php,mysql将会话信息存储在数据库中。该应用程序只在本地主机,Vista上运行。在php.ini文件中,我注释掉了“session.save_handler = files”这一行,并使用一个php类来处理会话的写入/读取等。

我的登录过程是这样的:通过登录提交登录凭证。 PHP。 login.php调用loginprocess.php。 loginprocess.php验证用户,如果有效开始一个新的会话并将数据添加到会话变量,那么它将重定向到index.php。

这是问题所在。 loginprocess.php页面有许多会话变量被设置为$ _SESSION ['account_id'] = $ account_id;等等,但是当我去index.php并做一个var_dump($_SESSION)它只是说“array()为空”。但是,如果我在loginprocess.php中执行var_dump($_SESSION),那么在重定向行header("Location: ../index.php");之前,它会显示会话变量中的所有数据。如果我查看存储会话信息的数据库,session_id字段,created_ts字段和expires字段中有数据,但session_data字段中没有任何内容,过去,这是所有会话数据的字段被存储。

我怎么能够在loginprocess.php中var_dump会话,但数据不存在于数据库表中,它使用某种缓存?我清理了我的饼干等等,但没有改变。

为什么session_id被写入表中,但实际的会话数据不是?

任何想法表示赞赏。谢谢。

+0

我们将不得不更多地了解您用于保存会话数据的过程。你说你正在将它存储在数据库中 - 你的会话如何设置读/写处理程序? – Johrn 2010-05-18 18:06:02

+0

我已经使用读/写的类对象更新了帖子。谢谢你的帮助。 – Ronedog 2010-05-18 20:16:07

回答

0

看看serialize()函数,并考虑在写入数据库之前使用它;和相应的unserialize()时读取

+0

感谢您的回复标记。在write()函数中,我用sql语句中的serialize($ session_data)替换了$ session_data,然后在read()函数中,我将return unserialize($ fields [“session_data”])替换为返回值$ fields [ session_data是“];但仍然是同样的事情。我把它放在错误的地方? – Ronedog 2010-05-17 23:25:13

1

要访问PHP上的会话数据,您需要先使用session_start。

+0

你需要每个页面的session_start – 2010-05-18 00:07:11

+0

在这个类中有一个session_start,每次创建对象时都会被实例化。我已经确定所有页面都有一个实例化对象,但结果仍然相同。 – Ronedog 2010-05-18 01:15:11

+0

在调用header(location ...)之前,我遇到了会话变量被填充的问题。 它只是没有工作,我即将得到坚果 - 然后我发现这在PHP帮助页面上: <? session_start(); $ _SESSION ['mySession'] =“hello”; header(“Location:xpage.php”); exit(); //这句话做魔术 ?> 试试这个,让我们知道。 干杯。 – ronaldosantana 2010-05-18 01:35:02