我正在制作一个表单供用户填写,然后在我清理'
之后检查他们的输入 function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
然后,在我检查了一些参数后,我创建了SESSIONS以便稍后回显这些值(1次让用户查看并检查他们输入的内容是否正确,然后发送电子邮件)
当我使用MAMP进行操作时,一切正常,但是当我将所有内容上传到HostGator的服务器时,一些SESSIONS正在被删除,一些更改值!为什么会这样?为什么要参加某些会议而不是所有会议?
另外,我使用$ _SESSIONS,因为当我验证输入时,我这样做:
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
<input name='id' type='text'>
</form>
所以我将输入数据发送到同一页面并检查它,如果一切正常,我创建SESSIONS并重定向到下一个表单。
我确切地知道SESSIONS被删除的地方在哪里并改变了它们的价值,但我不知道如何制止它!我不知道这是我的代码还是服务器上的内容。
修改
这里是我如何保存一个会话的输入,它正在修改它的值: 我从另一个.php获取用户的ID:
第一表格:获取身份证件
<?php
$checkcode = $_POST["id"];
$query = "SELECT id FROM agents_id_pass WHERE id ='$checkcode'";
$res = mysqli_query($link, $query);
$nres = mysqli_num_rows($res);
$array = mysqli_fetch_array($res);
list($id) = $array;
if ($nres == 0){
header('Location: ../compra/compra_login_fail.php');
exit();
}
else{
session_start();
$_SESSION['id'] = $checkcode; //HERE I SER THE SESSION
$_SESSION['planilla_venta_1_session'] = 1;
mysqli_close($link);
header('Location: planilla_venta_1.php');
exit();
}
第二表格:获取用户的个人信息(姓名,地址,等等) 我会告诉你只是删除自己的会话
<?php
session_start();
if (!isset($_SESSION['id'])){
session_destroy();
}
else{
//destroy session after 15 mins
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 900))
{
// last request was more than 15 minutes ago
session_unset(); // unset $_SESSION variable for the run-time
session_destroy(); // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
//Avoid session fixasion, changing session's id every 5 mins.
ini_set('session.gc-maxlifetime', 300);
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 300) {
// session started more than 5 minutes ago
session_regenerate_id(true);// change session ID for the current session an
invalidate old session ID
$_SESSION['CREATED'] = time(); // update creation time
}
}
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$zip = test_input($_POST["zip"]);
if (empty($_POST["zip"])){
$zipErr = "Código Zip es requerido";
}
else{
$zip = test_input($_POST["zip"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[0-9 ]*$/",$zip))
{
$zipErr = "Sólo se permiten números";
}
else{
$_SESSION['zip'] = $zip;
}
}
if(!isset($zipErr) && isset($_SESSION['zip'])
echo "<script>
window.location = 'planilla_venta_members.php'; //IF THERE IS NO ERROR AND THE SESSION IS SET -> REDIRECT TO THE NEXT FORM. ALL SESSIONS SET
</script>";
exit();
}
}
?>
<form name="sell_form" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
<td style="text-align:center"><input class="input" style="width:40px; margin-right:5px" type="input" name="zip" maxlength="5" value="<?php echo $_SESSION['zip'];?>">
<br>Zip*
</td>
我的所有会话都是以这种方式创建的,所以我的问题是,为什么服务器会取消设置或更改某些会话的值?
答案 0 :(得分:0)
我解决了!事实证明我用PHP ver 5.5编写我的代码,而服务器php配置是用PHP 5.2,所以我只是更新了它。