会话无法正常工作

时间:2012-02-25 06:23:18

标签: php session

我在localhost中遇到会话问题,问题是会话在重定向到新帖子页面时实际上无法正常工作,因为您应首先登录

登录代码

<?php
include '../Class/db.class.php';
include '../Class/validation.class.php';
@session_start();
if(!$_SESSION['user']){
    $link=$_GET['dir'];
    if($link){
echo <<<EOF
<html> <head><title>ورود</title></head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<form method='post' action='index.php?dir=$link'>
  Username: <input type='text' name='user'><br />
 password<input type='password' name='pass'><br />
  <input type='hidden' name='hidd' value=1>
    <input type='submit' value='login'><br />
</form>
EOF;
    }
 else {
    echo <<<EOF
<html> <head><title>login</title></head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<form method='post' action='index.php'>
   username: <input type='text' name='user'><br />
 password: <input type='password' name='pass'><br />
  <input type='hidden' name='hidd' value=1>
    <input type='submit' value='login'><br />
</form>
EOF;
    }
}
$db=new db("localhost", "root", "", "blog");
$con=$db->connect();
$logout=$_GET['logout'];
$user=$_POST['user'];
$pass=$_POST['pass'];
$hidden=$_POST['hidd'];
if($hidden){
if(!$user){
    echo "username field can't left blank";
}
 elseif (!$pass) {
    echo 'password field can't left blank!';

}
else{
    $userres=$db->usersearch($user, $pass);

    if($userres==FALSE){
        echo 'username or password is wrong';
    }
 else {
       $_SESSION['user']=$user;

    }
}
}
if($_SESSION['user']){
  $link=$_GET['dir'];


echo "you logged in ".$_SESSION['user']; 
if($link=="new")
    echo  '<meta http-equiv="REFRESH" content="0;url=../admin/post/new.php">';

}

if($logout)
    session_destroy();
if($_SESSION['user'])
echo '<br /><a href="?logout=1">logout</a>';

?>

新邮政编码

<?php
@session_start();

if($_SESSION['user']=="admin"){
   include '../../Class/db.class.php';
echo <<<EOF
<form method=post action="new.php">
 <br />   subject:
    <br />
    <input type="text" name="title"><br />
   post:<br />

   <textarea cols=50 rows=10 name="post"></textarea><br />
    <input type="submit" value="send">

EOF;
$title=$_POST['title'];
$post=$_POST['post'];
$db=new db("localhost", "root", "", "blog");
$db->connect();
if($title && $post){

   $d=$db->post_insert($title, $title, 1);
    if($d==TRUE)
            echo "post created";
    else
        echo "an error occurred while sending the post";




}

$dd=$db->read(0, 20);
for($i=0;$i<20;$i++){
   echo $dd['content'][$i]."<br />";
}

}
else
{
    echo "you should login first";
    echo $_SESSION['user'];
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
?>

请帮帮我!

2 个答案:

答案 0 :(得分:0)

您使用@符号抑制session_start()的错误输出这一事实表明session_start报告了您忽略的错误。

如果报告错误,您应该查看它产生的错误以确定错误。

通常,session_start由于已经发送了标头而失败。如果您的脚本在调用session_start之前输出任何文本,则会发生这种情况。一旦发送了标头,就无法启动会话,因为它取决于发送标头。

解决此问题的方法是确保session_start是您脚本中首先发生的事情。当session_start作为包含之后的第一件事发生时,这意味着在脚本开头有空格,或者在您包含的脚本中生成输出的空格或语句。您需要检查包含的文件并修复任何空白区域(PHP标记之外的任何内容)并检查它们在session_start发生之前不输出任何内容。

另外,请勿使用@进行错误抑制。它的编码相当于扫除需要在地毯下解决的潜在严重问题。

答案 1 :(得分:0)

我找到了其他答案,但没有解决我的问题。

我有一个登录页面..很好。

现在,我希望用户在index.html ..中选择您的位置。然后广告将仅显示图片的下一页来自您的位置。

可以,但是当用户访问其他链接并返回主页时,会话已被破坏

我使用:

INDEX.HTML

<form ... ok>
<input name="state">
<input type="submit">
</form>


MAINPAGE.PHP

<?php 
session_start();
$_SESSION['local'] = $_POST['estado'];
$_SESSION['local'];
 ?>
 <!--here is ok-->

 OTHER PAGE
 <?php 
session_start();
$_SESSION['local'];
 ?>
 <!--here is ok too.. session keeps alive but when I back with a menu link session is ended -->