未保存PHP会话

未保存PHP会话,php,session,mamp,Php,Session,Mamp,我的会话不起作用。每次我重新加载页面时,它都会生成一个新的会话id并删除 所有会话变量。。我不确定我的代码或配置中是否有错误。 我使用Mac上的MAMP作为PHP5.2.17的本地服务器软件 每个php文件首先都包含layout_top.php。 layout_top每次都会启动会话: <?php session_start(); ?> 编辑2: Strict Standards: session_start() [function.session-st

我的会话不起作用。每次我重新加载页面时,它都会生成一个新的会话id并删除 所有会话变量。。我不确定我的代码或配置中是否有错误。 我使用Mac上的MAMP作为PHP5.2.17的本地服务器软件

每个php文件首先都包含layout_top.php。 layout_top每次都会启动会话:

<?php

        session_start();

    ?>
编辑2:

Strict Standards: session_start() [function.session-start]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /Applications/MAMP/htdocs/network/layout_top.php on line 6

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /Applications/MAMP/htdocs/network/layout_top.php:1) in /Applications/MAMP/htdocs/network/layout_top.php on line 6

Strict Standards: session_start() [function.session-start]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /Applications/MAMP/htdocs/network/layout_top.php on line 6

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/network/layout_top.php:1) in /Applications/MAMP/htdocs/network/layout_top.php on line 6

为什么你要回答这么多问题。。。试试这个

       $query = mysql_query("SELECT * FROM user WHERE username = '$username'") or die(mysql_error());

        while($row = mysql_fetch_array($first_name_query))
        {

        if (!isset($_SESSION['username'])) {
            $_SESSION['username'] = $row['username'];
        }

        if (!isset($_SESSION['first_name'])) {
            $_SESSION['first_name'] = $row['first_name'];
        }    

        if (!isset($_SESSION['second_name'])) {
            $_SESSION['second_name'] = $row['second_name'];
        }

        if (!isset($_SESSION['id'])) {
            $_SESSION['id'] = $row['id'];
        }
        if (!isset($_SESSION['gender'])) {
            $_SESSION['gender'] = $row['gender'];
        }
        }
我将不建议您在会话中保存多个数据。。只需在会话变量中保存
userid
,因为会话变量保存在服务器上,所以它会在服务器上加载

如果您的会话目录(最像您所说的/tmp)不可写,那么它将无法保存,并且每次都必须重新生成一个新目录。以下是您可以验证它的方法:

如果(!可写(会话保存路径()){
回显“会话保存路径”。会话保存路径()不可写;
}

如果不可写,请更改目录权限

对于时区
错误。。 请看这个链接。。您需要
设置默认时区

对于已发送的标题错误,请检查

那么你就完了……)

如果您需要进一步的指导,请告诉我。

您确定“layout_top.php”确实包含在内吗?可能是路径问题,如果您使用
include
而不是
require
,并且禁用了
error\u reporting
,则可能会发生此问题,因为包含失败将导致警告,而不是错误,并且不会显示警告消息


请在
session\u start
之后的版面中添加一行内容,如下
echo“hello!session start!”
查看会话是否已启动,或者只是使用
require
而不是
include
,因此如果找不到文件,您的脚本将因致命错误而死亡。

这是一种模糊的回答,但有时可能会有所帮助


不要通过包含layout_top.php在每个文件上使用
sesison\u start()
。尝试在第一次加载时启动会话,然后避免再次调用
session\u start()

好的,这很有意义!但这并不能解决我的问题。如果我重新加载页面,会话将消失,我不知道原因。我从不在所有包含的文件中使用destroy_session和unset。。只是在一个log-out.php上,但这应该不是问题,因为这是一个不同的文件。。我认为问题在于MAMP的配置,但我找不到任何东西db_connect.php中没有任何内容,并且它是可写的,因此这不可能是问题put
ini_set('display_errors','on');错误报告(-1)
在代码顶部。。。请将以下代码放入layout_top.php中:在浏览器中仅访问layout_top.php,并检查每次
mysql_*()
API被弃用时,您是否获得相同的会话id。请改用MySQLi或PDO_MySQL扩展。我知道。。我刚开始学习php,所以我将在不久的将来学习它!但感谢您告诉我:)您的时区严格标准警告将文本输出到屏幕,这将导致会话开始失败,因为
…无法发送会话cookie-已由发送的标头(输出开始于…
Strict Standards: session_start() [function.session-start]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /Applications/MAMP/htdocs/network/layout_top.php on line 6

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /Applications/MAMP/htdocs/network/layout_top.php:1) in /Applications/MAMP/htdocs/network/layout_top.php on line 6

Strict Standards: session_start() [function.session-start]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /Applications/MAMP/htdocs/network/layout_top.php on line 6

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/network/layout_top.php:1) in /Applications/MAMP/htdocs/network/layout_top.php on line 6
       $query = mysql_query("SELECT * FROM user WHERE username = '$username'") or die(mysql_error());

        while($row = mysql_fetch_array($first_name_query))
        {

        if (!isset($_SESSION['username'])) {
            $_SESSION['username'] = $row['username'];
        }

        if (!isset($_SESSION['first_name'])) {
            $_SESSION['first_name'] = $row['first_name'];
        }    

        if (!isset($_SESSION['second_name'])) {
            $_SESSION['second_name'] = $row['second_name'];
        }

        if (!isset($_SESSION['id'])) {
            $_SESSION['id'] = $row['id'];
        }
        if (!isset($_SESSION['gender'])) {
            $_SESSION['gender'] = $row['gender'];
        }
        }