2015-04-26 103 views
2

我的giris.php,名为ajax,并获得url:giris_script.php。如果用户名和密码正确,则启动会话。我的代码如下:会话无法从浏览器识别

<?php 
require "config.php"; 
require "Cgiris.php"; 
require "security.php"; 


$username = security($_POST["username"]); 
$password = security($_POST["password"]); 
$password = md5($password); 

$obj = new Giris; 
$result = $obj->control($username, $password); 
if($result){ 
    @session_start(); 
    $_SESSION["admin"]= $username; 
} 
echo json_encode($result); 
?> 

而其他页面控制会话,但找不到任何会话:

if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 
if(!isset($_SERVER['HTTP_REFERER'])) header("refresh:0;url=404.php"); 

require "config.php"; 
require "Cayarlar.php"; 

$obj = new Ayarlar; 
$admin = $obj->getAllInfo(); 
$user = $admin["username"]; 

if(!isset($_SESSION['admin']) || $_SESSION['admin'] != $user) header("refresh:0;url=404.php"); 

我打印$ _SESSION [“admin”的]筛选,但没有显示。

我该如何解决?

+0

你为什么要抑制来自'session_start()'的错误?如果在每个页面的顶部都有'session_start()',或者在每个页面的顶部都包含config.php,那么你可能有意义。 – Devon

回答

0

这是一个好主意,把

session_start(); 

在你的PHP代码的顶部。不要把它放在条件陈述中。换句话说,在做其他事情之前总是先开始会话。您可以将其从您的(例如)删除它

if($result){ 

    $_SESSION["admin"]= $username; 
} 
+0

*必须始终出现在您的php代码的顶部*否,它不一定在顶部!它只是在你访问'$ _SESSION'数组之前! – Rizier123

0

因为session_start();不是页面的顶部。因此,它不设置会话

$obj = new Giris; 
$result = $obj->control($username, $password); 
if($result){ 
    @session_start();// This part must be top of the page !!! 
    $_SESSION["admin"]= $username; 
} 

在session_start应该是最高的页面 例如在你的index.php的;

<?php 
session_start(); 

// and you can set your session if there was not any problem you will see your session 
?>