[Code] ถามเรื่องการใช้คุกกี้ ให้ระบบล็อกอินค้างไว้ ถึงแม้จะปิดบราวเซอร์หรือปิดเครื่อง
ผมต้องการให้โค้ดนี้ล็อกอินค้างไว้ ถึงแม้จะปิดบราว์เซอร์ หรือ ปิดเครื่อง แล้วเปิดขึ้นมาใหม่
จากโค้ดด้านล่างนี้ผมได้ลอง set cookie ลงไปในส่วนของ user.php
Code (PHP)
setcookie('email', $email,time()+3600*24*7); // This is cookie that i've added.
setcookie('password', $password,time()+3600*24*7); // This is cookie that i've added.
ซึ่งพอทำการล็อกอิน แล้วลองปิดบราว์เซอร์ทั้งหมด แล้วเปิดใหม่ ปรากฏว่ามันไม่ล็อกอินค้างไว้ ผมใส่ผิดตำแหน่ง หรือว่า ตัวโค้ดมีปัญหาตรงไหนครับ แต่ถ้าเป็นในกรณีที่ไมไ่ด้ปิดบราว์เซอร์ทั้งหมด แต่ปิดแค่แท็บ ในขณะที่ล็อกอิน แล้วเปิดขึ้นมาใหม่ ก็ยังคงล็อกอินค้างอยู่นะครับ
login.php (PHP)
<?php
ob_start();
session_start();
require_once 'config.php';
?>
<?php
if( !empty( $_POST )){
try {
$user_obj = new Cl_User();
$data = $user_obj->login( $_POST );
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']){
header('Location: home.php');
}
} catch (Exception $e) {
$error = $e->getMessage();
}
}
//print_r($_SESSION);
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']){
header('Location: home.php');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Smart Login Page</title>
<link href='http://fonts.googleapis.com/css?family=Pacifico' rel='stylesheet' type='text/css'>
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/font-awesome.min.css" rel="stylesheet">
<link href="css/login.css" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<?php require_once 'templates/ads.php';?>
<div class="login-form">
<?php require_once 'templates/message.php';?>
<h1 class="text-center">Login</h1>
<div class="form-header">
<i class="fa fa-user"></i>
</div>
<form id="login-form" method="post" class="form-signin" role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input name="email" id="email" type="email" class="form-control" placeholder="Email address" autofocus>
<input name="password" id="password" type="password" class="form-control" placeholder="Password">
<button class="btn btn-block bt-login" type="submit" id="submit_btn" data-loading-text="Signing In....">Sign in</button>
</form>
<div class="form-footer">
<div class="row">
<div class="col-xs-6 col-sm-6 col-md-6">
<i class="fa fa-lock"></i>
<a href="forget_password.php"> Forgot password? </a>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<i class="fa fa-check"></i>
<a href="register.php"> Sign Up </a>
</div>
</div>
</div>
</div>
</div>
<!-- /container -->
<script src="js/jquery.validate.min.js"></script>
<script src="js/login.js"></script>
</body>
</html>
<?php ob_end_flush(); ?>
user.php (PHP)
<?php
/**
* This User will have functions that hadles user registeration,
* login and forget password functionality
* @author muni
* @copyright www.smarttutorials.net
*/
class Cl_User
{
/**
* @var will going contain database connection
*/
protected $_con;
/**
* it will initalize DBclass
*/
public function __construct()
{
$db = new Cl_DBclass();
$this->_con = $db->con;
}
/**
* This method will handle user login process
* @param array $data
* @return boolean true or false based on success or failure
*/
public function login( array $data )
{
$_SESSION['logged_in'] = false;
if( !empty( $data ) ){
// Trim all the incoming data:
$trimmed_data = array_map('trim', $data);
// escape variables for security
$email = mysqli_real_escape_string( $this->_con, $trimmed_data['email'] );
$password = mysqli_real_escape_string( $this->_con, $trimmed_data['password'] );
if((!$email) || (!$password) ) {
throw new Exception( LOGIN_FIELDS_MISSING );
}
$password = md5( $password );
$query = "SELECT member_id, member_display_name, member_email, member_status, roles_id FROM fm_member where member_email = '$email' and member_pwd = '$password' ";
//$query = "SELECT user_id, name, email, created, roles_id, id FROM users where email = '$email' and password = '$password'"
$result = mysqli_query($this->_con, $query);
$data = mysqli_fetch_assoc($result);
$count = mysqli_num_rows($result);
mysqli_close($this->_con);
if( $count == 1){
$_SESSION = $data;
setcookie('email', $email,time()+3600*24*7); // This is cookie that i've added.
setcookie('password', $password,time()+3600*24*7); // This is cookie that i've added.
if($_SESSION['member_status'] == 'Activated') {
$_SESSION['logged_in'] = true;
return true;
} else {
throw new Exception( 'Your account is Deactiavted! <br> Please contact to Adminnistrator for more information.' );
$_SESSION['logged_in'] = false;
}
}else{
throw new Exception( LOGIN_FAIL );
}
} else{
throw new Exception( LOGIN_FIELDS_MISSING );
}
}
/**
* This handle sign out process
*/
public function logout()
{
session_unset();
session_destroy();
header('Location: index.php');
}
?>
Tag : PHP
ประวัติการแก้ไข 2016-01-14 15:39:41
Date :
2016-01-14 15:38:40
By :
BButter
View :
1838
Reply :
3
คุณบอกว่าใช้ cookie แต่การตรวจของคุณมันใช้ session
session มันจะลบตัวเองทุกครั้งที่ปิดเบราเซอร์นะครับ
คุณต้องเอา cookie มาตรวจครับ ไม่ใช่ session
Date :
2016-01-14 15:54:14
By :
mr.v
บันทัด 7- 21 ลองปรับ การตรวจสอบใหม่ ตามลำดับความสำคัญ
Code (PHP)
if( isset($_SESSION['ชื่อ element ตัวแปรที่กำหนดว่าloginอยู่']) ){
//ถ้ามี ตัวแปร sessionตัวนี้ แสดงว่า ได้มีการ เปิด session อยู่ กำลัง connect
// ก็ไห้ตรวจสอบตัวแปร request อันอื่นว่ามีการส่งมาหรือไม่
if( isset($_REQUEST['ตัวแปร request จาก get put request เลือกเอาว่าจะตรวจสอบอะไร)){
// กรณี มีการส่งมา ทำอะไรก็ว่าไป
}else{
// กรณีไม่มีการส่งมาทำอะไรต่อ
}
}else{
//กรณ๊ ไม่มี session แสดงว่า เพิ่ง login ก็ให้ตรวจสอบจาก cookie
if( isset($_COOKIE['ตัวแปรเก็บ ค่าการล็อกอิน'])){
// ถ้ามีเอาค่ามา auto login โปรแกรม ดำเนินการ ล๊อคอินให้
}else{
//ถ้าไม่มี ก็ให้ manual login ผู้ใช้กรอกข้อความเอง
}
}
ตัวอย่างข้างบน ควรจะเริ่มตรวจเช็คจาก ไฟล์แรกที่ผู้ใช้เรียก ซึ่งก็ควรจะเป็น index.php ซึ่งเป็นด่านแรก
ไม่ใช่เข้ามาตรวจ ใน login.php
แต่ถ้าคุณใช้ login.php เป็นไฟล์แรก สำหรับผู้ใช้ ก็ไม่ว่ากัน
Date :
2016-01-14 22:07:41
By :
NewbiePHP
Load balance : Server 00