我在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.
*/
?>
请帮帮我!
答案 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 -->