【问题标题】:Value of sessions lost while routing URL's路由 URL 时丢失的会话值
【发布时间】:2011-08-04 17:47:55
【问题描述】:

我有 index.php 文件,其中包含所有样式表、js 等文件,并且我只使用 require 一次更改 index.php 的内容区域中的文件。问题是当用户请求其他一些页面会话时丢失。 ...并且会话变量未定义...这是我的 index.php ...当我访问 main.php 时,我收到会话变量未定义错误... ----index.php文件-----

<?php session_start();?>
<?php require_once("cc_includes/sessions.php"); ?>
<?php require_once('cc_includes/functions.php'); ?>
<?php require_once("cc_includes/sanitize.php"); ?>
<?php require_once('cc_includes/route.php'); ?>
<?php require_once("cc_includes/mydb.php"); ?>
<?php
    if($request_uri_header!='')
    {
        require_once($request_uri_header);
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <?php require_once("cc_includes/default_files.php");?>
</head>
<title><?php echo $the_title;?></title>
<body id="page1">
<!-- header -->
    <div class="bg">
        <section>
            <?php require_once("cc_includes/message.php"); ?>
            <div class="main">
                <header>
                    <?php require_once("cc_includes/logo.php"); ?>
                    <?php require_once("cc_includes/navigation.php");?>
                    <?php require_once("cc_includes/slider.php"); ?>
                </header>
                <section id="content">
                    <div class="padding">
                        <?php require_once("cc_includes/boxes.php"); ?>
                        <div class="wrapper">
                            <div class="col-3">
                                <div class="indent">
                                    <?php
                                        if($request_uri!='')
                                        {
                                            require_once($request_uri);
                                        }
                                    ?>
                                </div>
                            </div>
                        </div>
                    </div>
                </section>
                <?php require_once("cc_includes/footer.php"); 
                require_once("cc_includes/end_scripts.php"); 
                ?>
            </div>
        </section>
    </div>
</body>
</html>

--sessions.php 文件------

$session_user=false;
    $session_message=false;
    if(!isset($_SESSION) || !isset($_SESSION['user']))
    {
        $session_user=array(
                's_name'=>'',
                's_gender'=>'',
                'college_id'=>'',
                's_joining'=>'Dynamic',
                's_department'=>'Dynamic',
                's_location'=>'',
                's_dob'=>'',
                's_approved'=>0
            );
        $_SESSION['user']=serialize($session_user);

    }
    else
    {
        //print_r(unserialize($_SESSION['user']));
        //exit;
        $session_user=unserialize($_SESSION['user']);
    }

-----route.php 文件--------

if(isset($_GET['url']))
    {
        $total_request=explode('/',$_GET['url']);
        if(count($total_request)>1)
        {
            $_GET['url']=$total_request[0];
            array_shift($total_request);
            $_GET['action']=$total_request[0];
            array_shift($total_request);
            foreach($total_request as $key=>$value)
            {
                $_GET['param'.$key]=$value;
            }
            unset($total_request);
        }
        if($session_user['s_approved']!=0)
        {
            if($_GET['url']=='' || $_GET['url']=='index.php')
            {
                header("location: main.php");
            }
            if(!is_file($_GET['url']))
            {
                set_error_message("No Such Location Exits!");
                header("location: main.php");
            }
            $request_uri=$_GET['url'];
            $request_uri_header="headers/".str_replace('.php','.h',$request_uri);

        }
        else
        {
            $request_uri="users/login.php";
            $request_uri_header=str_replace('.php','.h',$request_uri);
            if($_GET['url']!='' && $_GET['url']!='index.php')
            {
                if($_GET['url']=='services.php' || $_GET['url']=='register.php')
                {
                    $request_uri=$_GET['url'];
                    $request_uri_header="headers/".str_replace('.php','.h',$request_uri);
                }
                else
                {
                    if(is_file($_GET['url']))
                    {
                        set_error_message("You need to Login Before Accessing Other Site Area!");
                    }
                    else
                    {
                        set_error_message("No Such Location Exits!");
                    }
                    header("location: index.php");
                }
            }
        }
        if(!is_file($request_uri_header))
        {
            $request_uri_header='';
        }
    }
    else
    {
        $request_uri="users/login.php";
        $request_uri_header=str_replace('.php','.h',$request_uri);
    }

----main.h 文件-----

if(!registered_user() && !admin_user())
    {
        set_error_message("Please Login To View The Page!",2);
        header("Location: index.php");
    }
    set_title("College Connections | Home");
    view_boxes(false);
    view_slider(FALSE);

-----main.php 文件-----

<?php 
   // if(!isset($session_user))
    //{
        //echo $session_user['s_name'];
        //exit;
    //}
    //print_r($session_user);
    //exit;
    echo"<h1 class=\"profile\">".$session_user['s_name']."</h1><h1 class=\"blue_profile\">'s Profile</h1><a href=\"dashboard.php\" style='float:right;margin-right:30px;margin-top:20px;'>College Dashboard</a><br /></br /><br />";
    echo"<hr>";
    echo"<div class=\"prof_image\">";
    $c_id=$session_user['college_id'];
    $image=mysql_query("select path from img_upload where username=\"$c_id\" limit 1",$connection);
    if(!$image)
    {
        die("database query failed".mysql_error());
    }
    echo mysql_error($connection);
?>

【问题讨论】:

    标签: php session


    【解决方案1】:

    您没有在 index.php 以外的任何文件中调用 session_start(),因此当加载其他页面时,会话将丢失

    【讨论】:

    • 但是文件包含在 index.php 中,因为它们被称为.....所以我为什么需要在每个文件中编写会话开始......并且网站在运行时非常实用但是当我在本地主机上运行它时,我得到了这个错误
    • 看看 if($request_uri!='') { require_once($request_uri); } 在 index.php 中,它在 route.php 中进行操作
    • 当你写“当用户要求其他页面时”这让我相信你指的是一个不包含在 index.php 文件中的页面,此外 route.php 看起来像它会在调用header("location: main.php") 时将用户重定向到 main.php,而不会将内容加载到 index.php,尝试手动设置会话,如果可行,则会话创建需要改进,因为如果它们确实有效,则意味着会话正在被重写没有数据。抱歉,我现在必须跑步,所以今天我无法提供任何帮助,但我希望这会有所帮助:)
    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多