You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP多页面使用session切换新服务器值为空,单页代码场景解决方案咨询

问题代码

第一页(login.php)

<?php
session_start();
//   $var_value =$_SESSION['orderidno'];
//   $var_value =$_GET['orderur'];
if(isset($_POST['login']))
{
    $mobileNo=$_POST['mobileNo'];
    $passWord=$_POST['passWord'];
}

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'here is my api url',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
));

$response_details = curl_exec($curl);
$data_details=json_decode($response_details,TRUE);
$data1_details=json_decode($response_details);
curl_close($curl);

$res=$data_details['ispasswordMatched'];

if($res)
{
    $_SESSION['loggedin'] = "true";
    $_SESSION['loggedinnumber'] = $mobileNo;
    foreach($data_details['content'] as $result)
    {
        $_SESSION['vendorname'] = $result['vendorname'];
        $_SESSION['vendorkey'] = $result['vendorkey'];
        $_SESSION['userkey'] = $result['key'];
        //here i have been storing my api result values in session
    }
    echo "<script> location.href='userdetails.php'; </script>";
}
else if($mobileNo!="")
{
    $empty=$data_details['message'];
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>PHP HTML TABLE DATA SEARCH</title>
        <style>
            table,tr,th,td
            {
                border: 1px solid black;
            }
            div#searcharea {
                text-align: center;
            }
        </style>
    </head>
    <body>
        <form id="search_form" method="post"  action="login.php" >
            <!--<h4>Search Customer / Customer Order</h4>-->
            <div>
                <input id="mobilenumbervalue" style="width: 88%; margin-top: 22px" type="text" name="mobileNo" placeholder="Enter the Mobile Number" pattern="[1-9]{1}[0-9]{9}" required>  
                <input id="orderidvalue" style="width: 88%; margin-top: 22px" type="password" name="passWord" placeholder="Enter the password"  required>
                <br>
                <p id="mobileError" style="color: red;"><?php echo $empty?></p>
                <p id="orderError" style="color: red;"><?php echo $emptyOrder?></p>
            </div>
            <div>
                <Button style="background: #fdd110;      width: 35%;
                height: 39px;   border: #fdd110; margin-top: 15px;" id="userdataSearchButton" type="submit" name="login" >Log In</Button>
            </div>
        </form>
        <script  type="text/javascript">
            function myFunction() {
                alert("work in progress");
            }
            function required()
            {
                var empt = document.forms["form1"]["valueToSearch"].value;
                if (empt == "")
                {
                    alert("Please input a Value");
                    return false;
                }
            }
        </script>
    </body>
</html>

第二页(userdetails.php)

<?php
session_start();
$var_value =$_SESSION['loggedin'];
if($var_value!="true")
{
    echo "the user doesn't exist";
}
else
{
    echo "the user is exists";
}
?>
<!-- 此处为第二页HTML内容 -->

实现逻辑

  • 第一页通过API校验用户提交的手机号和密码是否匹配,校验通过后将用户身份标识、API返回的业务数据存入session,设置$_SESSION['loggedin'] = "true"标记登录状态,再通过JS跳转至第二页userdetails.php。
  • 第二页开头调用session_start(),通过判断$_SESSION['loggedin']是否为true验证用户登录状态,决定是否允许访问页面。

问题描述

  • 第二页读取到的$_SESSION['loggedin']值为空,其余所有session变量也均为空,无法正常完成登录校验,用户无法访问第二页。

场景说明

  • 代码原部署在Godaddy Linux主机时运行完全正常,切换到新的Linux服务器后出现上述session失效问题。
  • 若将PHP逻辑拆分到单独文件通过AJAX调用,session可正常读取,但现有业务代码均采用单页集成PHP、HTML、JavaScript的结构,需要适配该结构的解决方案。

解决方案

1. 移除session_start()前的所有输出

新服务器大概率默认关闭了output_buffering配置,而原Godaddy主机默认开启该配置,自动缓冲提前输出的内容不影响session cookie发送。需确保所有页面<?php session_start();之前没有任何空格、换行、HTML标签等输出,第一页代码开头的多余空格要全部删除。

2. 跳转后终止代码执行

设置session完成并输出跳转JS后,添加exit;强制终止后续代码执行,确保session数据完整写入存储:

echo "<script> location.href='userdetails.php'; </script>";
exit; // 新增这行

3. 检查session存储路径权限

新建测试文件输出phpinfo(),查找session.save_path对应的目录,确保运行PHP服务的用户(如www-data、apache)对该目录有读写权限,可执行以下命令修复(替换为实际路径和运行用户):

chown www-data:www-data /var/lib/php/sessions
chmod 755 /var/lib/php/sessions

4. 统一session cookie配置

如果站点域名或路径有变更,可在session_start()前手动指定cookie作用域,避免跨路径/跨域名无法携带session cookie:

// 所有页面session_start()前添加
ini_set('session.cookie_domain', '.你的域名.com'); // 替换为实际域名,前面加.适配子域名
ini_set('session.cookie_path', '/');
session_start();

5. 检查session自动启动配置

确认php.ini中session.auto_start设置为Off,避免重复开启session导致数据丢失。

内容的提问来源于stack exchange,提问作者A. Chithrai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:15:05