로그인 및 사용자 프로필 코드 하나만 작업 중이지만 세션에 문제가 있습니다. 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() .'}}';
}
}
}
?>
세션을 사용하려는 모든 단일 페이지에'session_start();'가 필요합니다. 그것이'session.php'에서 세션을 시작하지 않았기 때문에 그것이 작동하지 않는 이유입니다. – Darren
그것을 사용하는 모든 단일 페이지의 맨 위에 :() (' php session_start();') – Darren
@Darren은 회신 해 주셔서 감사합니다 .. 나는 시도 할 것입니다 – Manoj