【问题标题】:Session data doesn't persist - php configuration issue?会话数据不持久 - php 配置问题?
【发布时间】:2014-12-23 14:22:28
【问题描述】:

我的文件中有以下代码 sn-p:-

session_start();
$_SESSION['fromPanel'] = "abcd";

<form method="post" action="/m/xyz.php">
    <div class="text inputcaption"><b><?= _("Email")?></b></div>
    <input type="email" name="username" value="<?=$objMobile->GetEmail()?>">
    </div>
</form>

当文件xyz.php 在发布请求中被调用时,$_SESSION 数组将变为空。请注意 session_start(); 在打印会话数组之前在 xyz.php 中给出。为什么会话数组自己变空。

xyz.php 的代码:

<?php
    session_start();

    print "<pre>";
    print_r($_SESSION);
    print "<post>";
?>

请找到通过phpinfo()获取的会话设置;

|---------------------------------|---------------------|---------------------|
| Session Support                 | enabled             |                     |
| Registered                      | save handlers       | files user          |
| Registered                      | serializer handlers | php php_binary wddx |
|                                 |                     |                     |
|---------------------------------|---------------------|---------------------|
| Directive                       | Local Value         | Master Value        |
|---------------------------------|---------------------|---------------------|
| session.auto_start              | Off                 | Off                 |
| session.bug_compat_42           | On                  | On                  |
| session.bug_compat_warn         | On                  | On                  |
| session.cache_expire            | 180                 | 180                 |
| session.cache_limiter           | nocache             | nocache             |
| session.cookie_domain           | no value            | no value            |
| session.cookie_httponly         | Off                 | Off                 |
| session.cookie_lifetime         | 0                   | 0                   |
| session.cookie_path             | /                   | /                   |
| session.cookie_secure           | Off                 | Off                 |
| session.entropy_file            | no value            | no value            |
| session.entropy_length          | 0                   | 0                   |
| session.gc_divisor              | 100                 | 100                 |
| session.gc_maxlifetime          | 1440                | 1440                |
| session.gc_probability          | 1                   | 1                   |
| session.hash_bits_per_character | 4                   | 4                   |
| session.hash_function           | 0                   | 0                   |
| session.name                    | PHPSESSID           | PHPSESSID           |
| session.referer_check           | no value            | no value            |
| session.save_handler            | files               | files               |
| session.save_path               | C:\Windows\Temp     | C:\Windows\Temp     |
| session.serialize_handler       | php                 | php                 |
| session.use_cookies             | On                  | On                  |
| session.use_only_cookies        | Off                 | Off                 |
| session.use_trans_sid           | 0                   | 0                   |
|---------------------------------|---------------------|---------------------|

在启用 error_reporting 时,出现以下警告:

Warning:  Unknown: open(C:\Windows\Temp\sess_1037ca26d3ebb62017eddc9cbfb107e2, O_RDWR) failed: Invalid argument (22) in Unknown on line 0

Warning:  Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (C:\Windows\Temp) in Unknown on line 0

【问题讨论】:

  • 愚蠢的问题,但您的 xyz.php 文件顶部是否有相同的 session_start();
  • 请向我们展示xyz.php 文件中的代码,您将在其中输出$_SESSION 数组以及开始会话的位置!
  • 当然我已经把 session_start();在 xyz.php 的顶部,但仍然会发生这种情况,我认为与服务器配置或 php.ini 配置相关的东西可能是一个问题。
  • 请在更新后的问题中找到 xyz.php 的代码。

标签: php html session post


【解决方案1】:

如果您在 header.php 或 common.php 等所有视图中包含一个通用文件,只需在顶部编写 session_start()。

【讨论】:

  • 你假设有一些文件包含??
【解决方案2】:

我将您的 sn-p 转换为工作代码,它运行起来就像一个魅力。 请提供一个完整的无效示例,以便我们为您提供帮助。

a.php:

<?php
session_start();
$_SESSION['fromPanel'] = "abcd";
?>

<form method="post" action="./b.php">
    <input type="email" name="username" value="john@example.com">
</form>

b.php:

<?php

session_start();

var_dump( $_SESSION['fromPanel'] );
var_dump( $_POST['username'] );

echo '<a href="./_test.php">back to form</a>';

发送表单后的结果输出(输入输入):

string 'abcd' (length=4)

string 'john@example.com' (length=16)

back to form

注意:使用&lt;label for="id-of-form"&gt;caption&lt;/label&gt; 而不是&lt;div class="text inputcaption"&gt;&lt;/div&gt;

【讨论】:

  • 当然它适用于某些系统,因此它似乎是一个配置问题。但是,要更改哪些配置是个问题。
  • 所以你应该首先在你的问题中准确地写出来。 ;) 这是第一次开始,因为您没有提供太多信息。
【解决方案3】:

要检查的更多内容:

  1. 您使用的浏览器是否接受 cookie?
  2. 清除缓存和 cookie,在 session_start() 之后调用 session_regenerate_id(),以确保不是一些旧的测试内容给您带来麻烦。
  3. session.save_path 是否已设置并可写?检查您的 phpinfo(); 输出。
  4. xyz.php 是否在同一个域中? Cookie 不允许跨域。
  5. 发布您的 session.xyz 设置。
  6. 这是您自己的服务器吗?在托管的网络空间上试用,反之亦然。
  7. 确保在 session_start() 调用之前没有空格。
  8. 首先致电error_reporting(E_ALL)
  9. 公开您的示例,以便其他人也可以查看。
  10. 去喝杯啤酒吧。它将在下周工作。 ;)

【讨论】:

  • 会话设置包含在问题和遇到的警告中。
  • 我们来了。警告指出网络服务器无法保留会话数据。原因可能是您需要转义反斜杠。尝试在您的 php.ini 中将 session.save_path 设置为 C:\\Windows\\Temp。或者用(单个)正斜杠替换反斜杠。
猜你喜欢
  • 2013-05-10
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2014-07-28
  • 1970-01-01
  • 2021-09-23
相关资源
最近更新 更多