出于我的想法。如何解决这个问题。我的会话没有在hostgator服务器上工作。但在其他服务器上它工作正常。
这是一个代码示例。
<form action="/payment-select/" method="post">
<select name="payment" onchange="this.form.submit()">
<option value=""<?php if(empty($_SESSION['payment'])) { echo ' selected="selected"'; } ?>><?php echo $lang_please_select; ?></option>
<?php
$sp = 'SELECT * FROM payment';
$qp = $db->rq($sp);
while($payment = $db->fetch($qp)) {
?>
<option value="<?php echo $payment['bank']; ?>"<?php if($_SESSION['payment'] == $payment['bank']) { echo ' selected="selected"'; } ?>><?php echo $payment['bank']; ?></option>
<?php } ?>
</select>
</form>
/payment-select/
include_once('includes/connection.php'); // session_start() here
include_once('includes/formatting.php');
$_SESSION['payment'] = strip_html_tags($_POST['payment']);
header("location:/payment/");
exit();
更新
session_start()
位于顶部。server A
工作正常。然后server B
罚款..但在hostgator
上使用相同的phpinfo时,$_SESSION['payment']
将在标题重定向到/payment/
页后保存。我不是在服务器之间共享会话。这就像我在服务器上安装wordpress一样好,服务器B好,服务器C问题。 (例子情况)
答案 0 :(得分:2)
服务器之间不共享会话。如果您将具有一个服务器上的会话的用户传递给另一个服务器上的页面(您希望保留该会话的位置),则需要开发一种将其关闭的方法。最好使用令牌和加密的序列化$_SESSION
,然后可以对其进行身份验证和加载。
主持人1
$s = serialize($_SESSION);
$enc = encrypt($s); // However you want to encrypt it, I recommend it.
$token = gen_token(); // Again, find a good way to generate a secure token;
主持人2
$token = $_POST['token'];
if(is_valid($token))
{
// Load the session (wrapped in a function, basically loop through the
// array and load the respective values.
load_session(unserialize(decrypt($_POST['enc'])));
}
答案 1 :(得分:0)
澄清这是如何起作用将会有所帮助。我最初的建议是,您是否在session_start();
使用$_SESSION
的所有网页上都包含{{1}}。如果不进一步了解什么不起作用,很难再做进一步的建议。
答案 2 :(得分:0)
不同服务器之间不会共享会话,因此您必须以某种方式将这些变量与事务一起传递 - 假设它们位于不同的计算机上。
答案 3 :(得分:0)
对于它的价值,我在hostgator上遇到了类似的问题。禁用cPanel中的“php.ini QuickConfig”修复了问题,因此该页面上的设置可能不正确。我怀疑这是一条不正确的路径,但无法确认。