PHP - 刷新后会话丢失


PHP - Sessions gets lost after refresh

我在php中遇到了问题。我已经实现了一个具有注册和登录功能的网站。在本周登录工作,但今天会话有问题..它们在页面刷新后会丢失。我试图在堆栈溢出中找到答案,但我不能。这是代码

<?php @session_start(); ?>
<?php require_once('Connections/connection.php'); ?>
<?php
mysql_select_db($database_connection, $connection);
$query_login2 = "SELECT * FROM `users`";
$login2 = mysql_query($query_login2, $connection) or die(mysql_error());
$row_login2 = mysql_fetch_assoc($login2);
$totalRows_login2 = mysql_num_rows($login2);

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_POST['usernamelog'])) {
    $query_User = sprintf("SELECT * FROM `users` WHERE Email= %s", GetSQLValueString($_POST['usernamelog'], "text"));
    $User = mysql_query($query_User, $connection) or die(mysql_error());
    $row_User = mysql_fetch_assoc($User);
    $totalRows_User = mysql_num_rows($User);
    $username = $row_User['Email'];
    $statuss= $row_User['Status'];
    $usernamee = $_POST['usernamelog'];
    $password = $_POST['passwordlog'];
  mysql_select_db($database_connection, $connection);
  $LoginRS__query=sprintf("SELECT Status, Email, Password FROM `users` WHERE Email=%s AND Password=%s",
    GetSQLValueString($usernamee, "text"), GetSQLValueString($password, "text")); 
  $LoginRS = mysql_query($LoginRS__query, $connection) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  //echo $loginFoundUser;
  if ($loginFoundUser) {    
    $_SESSION['MM_Username'] = $usernamee;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;   
  }
}
$colname_User = "-1";
if (isset($_SESSION['MM_Username'])) {
  $_SESSION['MM_Usernamee'] = $_SESSION['MM_Username'];
}
/******$_SESSION['MM_Usernamee'] IS LOST AFTER REFRESH********/
    mysql_select_db($database_connection, $connection);
    $query_User = sprintf("SELECT * FROM `users` WHERE Email= %s", GetSQLValueString($_SESSION['MM_Usernamee'], "text"));
    $User = mysql_query($query_User, $connection) or die(mysql_error());
    $row_User = mysql_fetch_assoc($User);
    $totalRows_User = mysql_num_rows($User);
    $username = $row_User['Email'];
    $status= $row_User['Status'];
    ?>

附言在本地主机上工作正常。

正确的答案在答案的评论中!!

在旧版本的 PHP 中,您必须在设置会话变量使用方法 session_register('[session_name]')

所以试试:

<?php
session_start();
if ( ! isset($_SESSION['session_name'])
{
    session_register('session_name');
    $_SESSION['session_name'] = 'Session value';
}
echo $_SESSION['session_name'];

编辑:在你写之前

<?php session_start()

你不能有任何文本,甚至不能有空格。因为这样在会话可以设置自己的标头之前发送标头。因此,您必须检查 PHP 的启动是否首先是此脚本中加载的内容。即使您使用"include"加载此脚本,在它不能是任何文本之前。