我收到了一些调查问卷,其中有一些字段检查(用PHP + HTML编写)。所以我通过https发送数据。
它像这样工作
<form id="frm_order" method="post" action="https://site/service_for_businesses" autocomplete="off">
<input name="username" id="username" size="40" maxlength="500" type="text" value="">
<button name="Submit" id="Submit" value="Отправить" type="submit" onclick="return final_check();"></button>
</form>
用户单击“提交”按钮后,所有数据都将移至$ _SESSION ['params'],然后传递给正在检查此数据的HELPER类。如果一切正常,那么用户将被重定向到“SUCCESS PAGE”(这部分工作正常),但如果表单字段中的USER数据有任何错误,则$ _SESSION [..]将传递给VIEW-controller和页面刷新并在有错误的表单字段附近显示警告。 问题是存在这样一种奇怪的行为:
1)我写了一些数据,例如我写了一个用户名“Mi%^ XS”我无法理解为什么。
我的网站部署到2台带有平衡器的网络服务器(以避免DdoS)。 这就像在两个服务器上有两个具有相同ID的会话
答案 0 :(得分:1)
apache中的会话通常存储在本地磁盘上。 (请参阅位置的php配置。)
如果将PHP会话保存路径设置为某个共享资源(例如通过NFS的网络磁盘);它实际上可能共享会话信息,因此允许您在两台服务器上拥有相同的会话。
至少,除非两个PHP + Apache实例实际上具有相同的会话存储;对于相同(甚至其他)的SID,它们会有不同的会话。
答案 1 :(得分:1)
默认情况下,php生成会话ID并将它们存储在php.ini中的session.save_path定义的目录中
另外,如果你向php发送一个不存在的会话cookie,php将创建相应的会话。
因此,如果您在服务器1上发出创建会话的请求,它将为该会话创建一个cookie。如果你然后切换到服务器2,它将识别会话cookie,如果会话已经存在,它将使用它(显然你的情况)。在这种情况下,对于具有不同数据的2台服务器,您具有相同的会话ID。
该问题的解决方案是将会话存储在2个服务器(例如数据库)通用的位置。请参阅:http://fr.php.net/manual/en/function.session-set-save-handler.php
答案 2 :(得分:1)
默认情况下,PHP将会话文件保存到/ tmp目录中。如果您在2个webservers目录中运行您的网站,则必须可以从这两个Web服务器目录中访问它们,否则每个Web服务器都将存储自己的会话文件。
您可以通过在php.ini上设置session.save_path来更改目录。详情请见http://www.php.net/manual/en/session.configuration.php
您还可以在数据库中存储会话。