2017-02-09 1 views
0

로그인 및 사용자 프로필 코드 하나만 작업 중이지만 세션에 문제가 있습니다. 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

세션을 사용하려는 모든 단일 페이지에'session_start();'가 필요합니다. 그것이'session.php'에서 세션을 시작하지 않았기 때문에 그것이 작동하지 않는 이유입니다. – Darren

+0

그것을 사용하는 모든 단일 페이지의 맨 위에 :() (' Darren

+0

@Darren은 회신 해 주셔서 감사합니다 .. 나는 시도 할 것입니다 – 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();을 추가 할 수 있습니다 (또는 사용 베이스 includesession_start(); 포함)

+0

대런 제안을 시도하고 있습니다. 하지만 여전히 해결되지 않고 내가 편집 한 코드 일 수도 있습니다. – Manoj

+0

1) 쿠키가 활성화되어 있고 2) 'session_start()'호출 전에 브라우저에 아무것도 표시되지 않습니다. ? –

+0

나는 당신을 얻지 못한다. 나는 이미 편집 한 코드를 시도하지만 여전히 같은 문제가있다. – Manoj

관련 문제