2017-02-09 7 views
0

ログインとユーザープロファイルの1つのコードを処理していますが、セッションに問題があります。私はLogin.phpを介してユーザーがログインすると、User.phpに行きます。しかし、私はこのページを新しいタブで開くとLogin.phpに行き、再びログインを求めます。誰かが私が間違っている場所を教えてくれますか?私のコードは以下の通りです。セッションがPHPで動作していません

Login.Php

<?php 
session_start(); 
// check if session set. 
if(isset($_SESSION['id'])) { 
    $url=SITE_URL.'User.php'; 
    (header("Location: $url")); 
} 
?> 

<?php 
include("dbconfig.php"); 
include('class/userClass.php'); 
$userClass = new userClass(); 

$errorMsgLogin=''; 
if (!empty($_POST['loginSubmit'])) 
{ 
$usernameEmail=$_POST['username']; 
$password=$_POST['password']; 
if(strlen(trim($usernameEmail))>1 && strlen(trim($password))>1) 
    { 
    $id=$userClass->userLogin($usernameEmail,$password); 
    if($id) 
    { 
     $url=SITE_URL.'User.php'; 
     header("Location: $url"); 
    } 
    else 
    { 
     $errorMsgLogin="Please check login details."; 
    } 
    } 
} 


?> 
<!doctype html> 
<html> 
<head> 
</head> 
<body> 
<form id="contact-form" method="post"> 
      <div class="login-controls"> 
       <div class="form-input"> 
        <input type="text" class="txt-box" name="username" id="username" placeholder="Username" required> 
       </div> 
       <div class="form-input"> 
        <input type="password" class="txt-box" name="password" id="password" placeholder="Password" required> 
       </div> 
<div class="errorMsg"><?php echo $errorMsgLogin; ?></div> 
       <div class="main-bg"> 
        <input type="submit" name="loginSubmit" id="submit" class="btn " value="Login"> 
       </div> 
<div class="check-box"> 
        <a href="ForgotPassword.php">Forgot your Password ?</a> 
       </div> 


</form> 
</br></br> 
</body> 
</html> 

User.php

<?php 
    session_start(); 

    // check if session set. 
    if(!isset($_SESSION['id']) || empty($_SESSION['id'])) { 
     $url=SITE_URL.'Login.php'; 
     die(header("Location: $url")); 
    } 
    ?> 
    <?php 
    $session_id=$_SESSION['id']; 
    include('class/userClass.php'); 
    $userClass = new userClass(); 
    include('dbconfig.php'); 
    $userDetails=$userClass->userDetails($session_id); 
    ?> 

     <!doctype html> 
      <html> 
      <head> 
      </head> 
      <body> 
      ------------something----- 
       </body> 
      </html> 

dbconfig.php

<?php 
session_start(); 
/* DATABASE CONFIGURATION */ 
define('DB_SERVER', 'localhost'); 
define('DB_USERNAME', 'XXXXXX'); 
define('DB_PASSWORD', 'XX2'); 
define('DB_DATABASE', 'Xxxx'); 
define("SITE_URL", "http://try1234.com"); // Eg. http://yourwebsite.com 


function getDB() 
{ 
    $dbhost=DB_SERVER; 
    $dbuser=DB_USERNAME; 
    $dbpass=DB_PASSWORD; 
    $dbname=DB_DATABASE; 
    try { 
    $dbConnection = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
    $dbConnection->exec("set names utf8"); 
    $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    return $dbConnection; 
    } 
    catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
    } 

} 
?> 

userClass.php

<?php 
    class userClass 
    { 
     /* User Login */ 
     public function userLogin($usernameEmail,$password) 
     { 

       $db = getDB(); 
       $hash_password= hash('sha256', $password); 
       $stmt = $db->prepare("SELECT id FROM profile WHERE username=:usernameEmail AND pass=:hash_password"); 
       $stmt->bindParam("usernameEmail", $usernameEmail,PDO::PARAM_STR) ; 
       $stmt->bindParam("hash_password", $hash_password,PDO::PARAM_STR) ; 
       $stmt->execute(); 
       $count=$stmt->rowCount(); 
       $data=$stmt->fetch(PDO::FETCH_OBJ); 
       $db = null; 
       if($count) 
       { 
        $_SESSION['id']=$data->id; 
        return true; 
       } 
       else 
       { 
        return false; 
       }  
     } 

     /* User Details */ 
     public function userDetails($id) 
     { 
      try{ 
       $db = getDB(); 
       $stmt = $db->prepare("SELECT email,username,Pname, Mobile FROM profile WHERE id=:id"); 
       $stmt->bindParam("id", $id,PDO::PARAM_INT); 
       $stmt->execute(); 
       $data = $stmt->fetch(PDO::FETCH_OBJ); 
       return $data; 
      } 
      catch(PDOException $e) { 
       echo '{"error":{"text":'. $e->getMessage() .'}}'; 
       } 

     } 


    } 

?> 
+2

を含むベースincludeあなたは 'のsession_start()する必要があります。'ひとつひとつのページでは、セッションを使用する予定。だから、 'session.php'でセッションを開始していないので、動作していません。 – Darren

+0

それを使用するすべての単一ページのトップに:-)( '<?php session_start();') – Darren

+0

@Darrenは返信に感謝します..iは試してみます – Manoj

答えて

2

コメントに記載されているように、任意のページでセッションを使用する場合は、常にでセッションを開始する必要があります。

これは通常、それらのページのそれぞれに非常に最初のものとして行われます。

<?php 
session_start(); 

//.....the rest of your code. 

Evidentally、あなたはそれを動作させるためにあなたのsession.phpページ上で起動する必要があります。

それはまた、あなたのsession.phpロジックが少し冗長であることは注目に値します。セッションが&存在している場合は、上記の冗長/再帰的なチェックを削除し

<?php 
session_start(); 

// check if session set. 
if(!isset($_SESSION['id']) || empty($_SESSION['id'])) { 
    $url=SITE_URL.'Login.php'; 
    die(header("Location: $url")); 
} 
// otherwise continue. 
include('class/userClass.php'); 
$userClass = new userClass(); 

//.... the rest of your code. 

は、適切なコード「フロー」を可能にする:あなたは次のように何かをしたほうが良いと思います。

0

あなたが各ページにセッションの可用性を必要としている知っている場合、あなたはあなたのphp.iniとはsession.auto_start = 1を追加、編集したり、提案の上コメント投稿のようにしてくださいとあなたのファイルのそれぞれにsession_start();を追加することができます(または使用session_start();

+0

私はダレンの提案を試していますそれでも解決していないと私は私のコードを編集したかもしれない私は何か間違っているので、私にお勧めします – Manoj

+0

あなたは絶対に1)クッキーが有効になっていると2) 'session_start() ? –

+0

私はあなたを取得していません..既に編集したコードを試してみましたが、同じ問題が残っています – Manoj

関連する問題