|
|
|
ดูให้หน่อยครับ ทีแรกใช้ session ก็ได้นะครับ แต่พอเปลี่ยนมาใช้ coockie แล้ว ไม่ได้พอล็อกอินถูก ก้ไม่ |
|
|
|
|
|
|
|
ทีแรกใช้ session ก็ได้นะครับ แต่พอเปลี่ยนมาใช้ coockie แล้ว ไม่ได้
พอล็อกอินถูก ก้ไม่ทำงานอะไรต่อ งงงง
Code (PHP)
--------- login.php ----------
<?
session_start();
require("login_process.php");
?>
<form id="frmLogin" name="frmLogin" method="post" action="login.php" enctype="multipart/form-data" onsubmit="return check_data_login()">
<input type="text" name="u_name" id="u_name" size="30" /><br/>
<input type="password" name="password" id="password" size="31" /><br/>
<input type="checkbox" name="saveuser" id="saveuser" <?=$svusr?> />จำฉันไว้ในเครื่อง<br/>
<input type="submit" name="Submit" id="Submit" value=" OK " size="30" width="30" onclick="JavaScript:chkUsername();" />
</form>
--------- login_process.php --------
<?php
session_start();
require("includes/config_login.inc.php");
$username = $_REQUEST['u_name'];
$password = $_REQUEST['password'];
$svusr = $_REQUEST['saveuser'];
if(isset($_REQUEST[$cook_nm])){
$svusr = 'on';
}else{
$focus = "document.frmLogin.u_name.focus();";
}
if((!empty($username)) and (!empty($password)) ){
$username = trim($_REQUEST['u_name']);
$password = $_REQUEST['password'];
require("includes/connection.php");
mysql_select_db($db_name);
$sql = "SELECT user_name,password,last_log FROM user WHERE user_name='$username'";
$db_query = mysql_query($sql);
$result = mysql_fetch_array($db_query);
if(!$result){
// echo "55";
echo "<center><br><img src=\"../image/security/stop_login.png\"/><br><br><h3>การ Login ผิดพลาด</h3>การณาตรวจสอบ Username และ Password</center>";
echo "<hr><br><br><center><a href=./>Login </a></center>";
exit();
}
if(md5(trim($password)) == trim($result['password'])){
// $_SESSION['ses_user']=$username;
// $_SESSION['last_log'] = $result['last_log'];
$_COOKIE['cook_user'] = $username;
$_COOKIE['last_log'] = $result['last_log'];
if($_REQUEST['saveuser']=="checked"){
setcookie($cook_nm,$username,time()+$cook_time);
}else{
setcookie($cook_nm,"",time());
}
mysql_query("UPDATE user SET last_log=date_now WHERE user_name='$username' ");
mysql_query("UPDATE user SET date_now='$now' WHERE user_name='$username' ");
?>
<html>
<title>Login...</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content="3; url=index.php" >
<center><br><br><img src="../image/loging_in.jpg" ><br><br>
<b>รอสักครู่ กำลังเข้าสู่ระบบ...</b></center>
</html>
<?
}else{
// echo "55";
exit();
}
}
?>
-------------- auth.inc.php --------------
<?
require("config_login.inc.php");
if(!isset($_COOKIE['cook_user'])){
if(!isset($_REQUEST[$cook_nm])){
header("Location: ../login.php?");
exit;
}else{
require("connection.php");
mysql_select_db($db_name);
$db_query = mysql_query("SELECT user_name,password,last_log FROM user WHERE user_name='$_COOKIE[$cook_nm]'");
$result = mysql_fetch_array($db_query);
if(!$result){
header("Location: ../login.php");
exit;
}
if($_COOKIE[$cook_pw] != $result['password']){
header("Location: ../login.php");
exit;
$_COOKIE['cook_user'] = $_COOKIE['$cook_nm'];
$_COOKIE['last_log'] = $_COOKIE['last_log'];
}
}
}
?>
------- config_login.inc.php -------------
<?php
error_reporting(E_ALL ^ E_NOTICE); // ????????? Error
ob_start();
$cook_nm = 'login_26br';
$cook_pw = 'log_65pw';
$cook_time = 3600*24*6;
require_once('connection.php');
$bkk = mktime(gmdate("H")+7,gmdate("i")+0,gmdate("s"),gmdate("m"),gmdate("d"),gmdate("Y"));
$datetimeformat = "j/m/y - H:i";
$now = date($datetimeformat,$bkk);
?>
Tag : - - - -
|
|
|
|
|
|
Date :
2010-05-11 19:35:10 |
By :
t-monroe |
View :
1085 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เท่าที่ดูน่าจะเกิดจาก การเก็บไฟล์นะครับ
session เป็นตัวแปรที่ประกาศแล้ว ทุกๆ ไฟล์ใน server จะเรียกใช้งานได้ แต่ cookie รู้สึกว่าจะต้องเป็น file ที่อยู่ path เดียวกันจึงจะมองเห็น
ตอนนี้ไฟล์ สร้าง cookie จะอยู่ใน include แต่ ไฟล์ที่เรียกใช้งานจะอยู่ด้านนอก เลยทำให้มองไม่เห็น ลองย้ายไปข้างนอกใน path เดียวกันดูนะครับ
พอดีไม่ได้เล่่น kookie นานแล้วเลยตอบได้แค่นี้ก่อน รอท่านอื่นมาตอบต่อละกันนะครับ
|
|
|
|
|
Date :
2010-05-11 20:07:10 |
By :
DownsTream |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ปรกติ ผมจะทำสองระบบ ใช้ได้ทั้ง เฉพาะ session และ cookie คือ ไม่จำค่าล๊อกอินไว้ก็ได้ในบราวเซอร์ หรือจำไว้ก็ได้(cookie)
ลองตรวจสอบให้ดีนะครับ อย่าลืมว่า cookie เป็นตัวส่งมาจากบราวเซอร์ดังนั้นอ php ปัจจุบันมัน escape string ให้ด้วยนะคับ
อีกอย่างจากโค้ด auth.php ผมดูแล้วเหมือนว่าคุณจะใส่ ตำแ หน่งของโค้ดผิดนะครับ
จริงๆ น่าจะ
if( ! isset($_COOKIE['cook_user']))
{
header(xxx);
}
else
{
// check here
}
แต่โค้ดคุณเช็ค ใน ตอนที่ไม่มีคุ๊กกี้ - -
เอาตัวอย่างที่ผมทำมาให้ดูหน่อยก็แล้วกัน คือผมตรวจสอบจาก session หมดครับ เว้นครั้งแรกที่เข้ามา หากว่ามี cookie อยู่ แต่ไม่มี session ก็ให้สร้าง เซสชั่นขึ้นมา ทีนี้ก็ตรวจสอบเพียงแค่ session
(โค้ดนี้ผมไม่ได้ทำระบบ security นะครับ ไม่ได้เข้ารหัสรหัสผ่าน ^^ (โปรเจกต์ นศ.) มีผู้ใช้หลายประเภทครับ)
Code (PHP)
/**
* จัดการเรื่อง session และ cookie สำหรับผู้ใช้ระบบ
*/
if ($_COOKIE['user'] AND ! $_SESSION['user'])
{
try
{
$temp = get_magic_quotes_gpc() ? unserialize(stripslashes($_COOKIE['user'])) : unserialize($_COOKIE['user']);
// สร้าง sql
if ($temp['type'] === 'member')
{
$sql = "SELECT member_id, member_uname, member_upass FROM member WHERE member_uname='".$temp['uname']."' AND member_upass='".$temp['upass']."' AND member_status='Y'";
}
elseif ($temp['type'] === 'admin')
{
$sql = "SELECT admin_id, admin_uname, admin_upass FROM admin WHERE admin_uname='".$temp['uname']."' AND admin_upass='".$temp['upass']."' AND admin_status='Y'";
}
elseif ($temp['type'] === 'hotel')
{
$sql = "SELECT hotel_id, hotel_uname, hotel_upass FROM hotel WHERE hotel_uname='".$temp['uname']."' AND hotel_upass='".$temp['upass']."' AND hotel_status='Y'";
}
else
{
throw new Exception('cookie ผิดพลาด');
}
// ตรวจสอบผู้ใช้
$query = mysql_query($sql);
if ($row = mysql_fetch_array($query))
{
$row = Util::stripslashes_all($row);
$arr = array(
'id' => $row[0],
'uname' => $row[1],
'upass' => $row[2],
'type' => $temp['type']
);
// ตั้งค่า session user
$_SESSION['user'] = $arr;
// ต่อเวลา cookie
setcookie('user', serialize($_SESSION['user']), (time() + $config['cookie_expire']));
}
}
catch (Exception $ex)
{}
}
elseif ($_COOKIE['user'] AND $_SESSION['user'])
{
// ต่อเวลา cookie
setcookie('user', serialize($_SESSION['user']), (time() + $config['cookie_expire']));
}
ให้ดูเล่นๆ อีกอันครับ (เป็นโปรเจกต์ส่วนตัว ใช้เฟรมเวอร์คครับ กำลังดองอยู่ ^^) โค้ดอาจอ่านไม่ค่อยเข้าใจ หลักการทำงานเดียวกันแหละคับ
(ไม่ได้ใช้ module เสริมต่างๆ เช่น auth หรือ validate เพราะเพิ่งศึกษา)
ส่วน Logging คอนโทรลเลอร์
public function action_logging()
{
if ( ! empty($_POST['uname']) AND ! empty($_POST['upass']))
{
$model = new Model_Admin;
$is_admin = $model->check_admin($_POST['uname'], md5($_POST['upass']));
if ($is_admin)
{
Session::instance()
->set('admin_uname', $_POST['uname'])
->set('admin_upass', md5($_POST['upass']));
if ( ! empty($_POST['remember']))
{
Cookie::set('admin_uname', $_POST['uname'], User::COOKIE_EXPIRE);
Cookie::set('admin_upass', md5($_POST['upass']), User::COOKIE_EXPIRE);
}
$this->request->redirect(URL::site('manage'));
return;
}
}
$this->action_index('Username หรือ Passord ไม่ถูกต้อง');
}
ส่วน โมเดล
class Model_Admin extends Kohana_Model
{
public function check_admin($uname, $upass)
{
$sql = sprintf(
"SELECT * FROM admin ".
"WHERE admin_uname = %s ".
"AND admin_upass = %s",
$this->_db->escape($uname),
$this->_db->escape(md5($upass))
);
$rs = $this->_db->query(Database::SELECT, $sql, FALSE);
return $rs->count() ? TRUE : FALSE;
}
}
พวก static ฟังชั่นตรวจสอบ สถานะ
class User
{
// 15 days seconds
const COOKIE_EXPIRE = 1296000;
public static function is_admin()
{
if ( ! is_null(Session::instance()->get('admin_uname')) AND ! is_null(Session::instance()->get('admin_upass')))
{
return TRUE;
}
elseif ( ! is_null(Cookie::get('admin_uname')) AND ! is_null(Cookie::get('admin_upass')))
{
$model = new Model_Admin;
$is_admin = $model->check_admin(Cookie::get('admin_uname'), Cookie::get('admin_upass'));
if ($is_admin)
{
Session::instance()->set('admin_uname', Cookie::get('admin_uanme'));
Session::instance()->set('admin_upass', Cookie::get('admin_upass'));
return TRUE;
}
}
return FALSE;
}
public static function add_admin_cookie_time()
{
if ( ! is_null(Cookie::get('admin_uname')) AND ! is_null(Cookie::get('admin_upass')))
{
Cookie::set('admin_uname', Cookie::get('admin_uname'), User::COOKIE_EXPIRE);
Cookie::set('admin_upass', Cookie::get('admin_upass'), User::COOKIE_EXPIRE);
}
}
public static function clear_admin_cookie_session()
{
// delete cookie
Cookie::delete('admin_uname');
Cookie::delete('admin_upass');
// delete session
Session::instance()
->delete('admin_uname')
->delete('admin_upass');
}
}
http://gunner.freetzi.com
|
|
|
|
|
Date :
2010-05-11 21:16:51 |
By :
เอี่ยว ^^ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ เด่วลองดูครับ... ถ้าไม่ได้พรุ่งนี้มาถามใหม่
|
|
|
|
|
Date :
2010-05-12 11:38:41 |
By :
t-monroe |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|