首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POST ()在POST后更改

POST ()在POST后更改
EN

Stack Overflow用户
提问于 2015-10-15 16:35:00
回答 3查看 361关注 0票数 3

我的生产服务器上出现了一个奇怪的情况。但是,在我的本地开发环境中,这不是一个问题。下面是一个测试脚本,我可以用它复制问题:

代码语言:javascript
复制
<?php

session_start();

$_SESSION['test'] = 'test';

echo 'session_id(): '.session_id();

session_write_close();

?>

<form method="POST">
    <input type="submit" value="Post to self" />
</form>

如果我在浏览器中加载此页面并刷新页面(CTRL+R),每次都会显示相同的session_id()值。

但是,如果单击submit按钮,就会得到两种不同的结果:

  • 开发:相同的session_id()值(预期结果)。
  • 生产:一个不同的 session_id()值。

此外,在生产服务器上,如果我再次重新加载页面,就会得到原始的 session_id()值。

如何让生产服务器持久化session_id()值?如有任何建议,将不胜感激。

谢谢!

注释的详细信息:在我发布的基本示例中,如下所示:

代码语言:javascript
复制
array(5) { 
         ["lifetime"]=> int(0) 
         ["path"]=> string(1) "/" 
         ["domain"]=> string(0) "" 
         ["secure"]=> bool(false) 
         ["httponly"]=> bool(false) 
         }

在实际的生产代码中,如下所示:

代码语言:javascript
复制
array(5) { 
         ["lifetime"]=> int(0) 
         ["path"]=> string(1) "/" 
         ["domain"]=> string(0) "" 
         ["secure"]=> bool(true) 
         ["httponly"]=> bool(true) 
         }

(我在生产中使用HTTPS )。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-21 10:27:40

对不起大家;疯狂的追逐。根据主机的建议,我运行了EasyApache将服务器升级到PHP5.5。在这样做的过程中,PHP处理程序无意中被切换到了SuPHP以外的其他东西,因此在/tmp中的会话文件上存在读取权限问题。因此,PHP不断地生成新的会话文件。

编辑:我还应该注意到,is_writable(session_save_path())正在返回true,这就是我对问题的错误理解。

票数 0
EN

Stack Overflow用户

发布于 2015-10-15 19:13:05

最安全的方法是告诉PHP使用cookie。要求用户允许会话厨师。

代码语言:javascript
复制
session_name(SESSION_NAME);

// PHP 5.2+ Prevent x-domain cookie sess theft. Dont let Client scripts see cookie
$HTTPONLY = 1; // 0 or 1;

if (function_exists('session_set_cookie_params')) 
{
    session_set_cookie_params(3600, '/', '.domain.com', 0, $HTTPONLY);
} elseif (function_exists('ini_set')) 
{
    ini_set('session.cookie_lifetime', 3600);
    ini_set('session.cookie_path', '/');
    ini_set('session.cookie_domain', '.domain.com');

    ini_set('session.cookie_httponly', $HTTPONLY);
}

您也可以通过表单变量传递SESSION_ID,但这并不安全。

票数 0
EN

Stack Overflow用户

发布于 2015-10-15 16:49:45

// session_regenerate_id()

代码语言:javascript
复制
session_start();

    if(isset($_POST)){
        $_SESSION['IDONE'] = session_id();
        session_regenerate_id();
        $_SESSION['IDTWO'] = session_id();
        var_dump($_SESSION);
    }

将"name“属性设置为<input>标记,这样$_POST变量将由一个变量组成。

PHP手册

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33153908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档