ปัญหาการส่งค่า session ใน ajax

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderators: mindphp, ผู้ดูแลกระดาน

kik

ปัญหาการส่งค่า session ใน ajax

Post by kik » 26/06/2010 9:08 am

ได้ทำการสร้างฟอร์ม login โดยมีการเช็คค่าโดยการใช้ ajax
ในไฟล์ที่ ajax เรียนนั้นถ้าข้อมูลถูกต้องจะกำหนดค่า session ขึ้นมาเพื่อที่เก็บค่า user
จึงใช้ session เก็บค่านั้นเพื่อส่งไปยังหน้าถัดไป ปัญหาที่เกิดคือ ค่า session ที่ส่งไปยังเพจถัดไปหลังจาก login สำเร็จกลับไม่มี ทั้งที่ประกาศ session_start(); ไว้ทั้งสามหน้า

หน้า main -> chkLogin ถ้าสำเร็จ -> member

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 23786
Joined: 22/09/2008 6:18 pm
Contact:

Re: ปัญหาการส่งค่า session ใน ajax

Post by mindphp » 26/06/2010 2:45 pm

ลองเอาโค้ดแต่ละหน้ามาลงดูหน่อยครับ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

kik

Re: ปัญหาการส่งค่า session ใน ajax

Post by kik » 26/06/2010 7:01 pm

ขออภัยที่มาลงให้ช้านะคะ

นี้ code หน้า login.ph

if(defined('MAIN_INIT')){
$login_root = MAIN_INIT == 'chklogin' ? '../../' : '';
if($_REQUEST[action] == 'login'){
$login_user = trim($_POST[login_user]);
$login_password = trim($_POST[login_password]);
}elseif($_REQUEST[action] == 'logout'){
setCookie($prefix.'login_user', '', time(), '/');
setCookie($prefix.'login_password', '', time(), '/');
$login_user = '';
$login_password = '';
unset($_SESSION[$prefix][login]);
}elseif(isset($_SESSION[$prefix][login])){
$login_user = $_SESSION[$prefix][login];
$login_password = $_SESSION[$prefx][login][password];
}else{
$_SESSION[$prefix][login] ;
$_SESSION[$prefix][login][password];
}
if($login_user != '' && $login_password != ''){
$login_result = $db->search($config[db_member],'username',$login_user);
if($login_result[username] == $login_user && $login_result[password] == $login_password){
$_SESSION[$prefix][login] = $login_user;
$_SESSION[$prefix][login][password] = $login_password;

if($_SESSION[$prefix][login] == '' && $_SESSION[$prefix][password] == ''){
echo 'no';
}else{
$error = false;
}
}else{
$error = $lng[LOGIN_ERROR];
$login_user = '';
$login_password = '';
}

}
if($login_user == '' || $login_password == ''){
$patt = array('/{(LNG_[A-Z_]+)}/e','/{USERNAME}/','/{PASSWORD}/','/{FUNCTION}/','/{FORMACTION}/','/{REGISTER}/','/{FORGOT}/');
unset($replace);
$replace[] = '$lng[$1]';
$replace[] = $login_user;
$replace[] = $login_password;
$replace[] = 'return chkLogin(login_form.login_user.value,login_form.login_password.value,\'error\')';
$replace[] = 'index.php?action=login';
$replace[] = getURL('register','','','');
$replace[] = getURL('forgot','','','');
$content = preg_replace($patt,$replace,file_get_contents("$login_root$config[temp]member/loginform.html"));
}

}

kik

Re: ปัญหาการส่งค่า session ใน ajax

Post by kik » 26/06/2010 7:04 pm

chkLogin.php

<?php
@header("content-type: text/html; charset=UTF-8");
$referer = getenv("HTTP_REFERER");
$referer = ($referer == '') ? $_SERVER[HTTP_REFERER] : $referer;
$host = $_SERVER[HTTP_HOST];
if(preg_match("/$host/ui",$referer)){
include ('../../bin/config.php');
include ("../../language/$config[lng].php");
include ('../../bin/function.php');
include ('../../bin/db_class.php');
$db = new sql($config[db_server], $config[db_username], $config[db_password], $config[db_name]);
DEFINE('MAIN_INIT', 'chklogin');
include ('login.php');
echo $error;
$db->close();
}
?>

member.php

if(defined('MAIN_INIT')){

if($_SESSION[$prefix][login] == '' && $_SESSION[$prefix][password] == ''){
echo 'no';
}else{
echo 'yes';
}

}

kik

Re: ปัญหาการส่งค่า session ใน ajax

Post by kik » 26/06/2010 7:19 pm

ส่วน
ob_start() และ session_start() นั้นอยู่ในหน้า config.php ซึ่งมีการ include อยู่ในส่วนของ index.php อยู่แล้วคะ
เมื่อทำการ login จะตรวจสอบค่าถ้าถูกต้องจะส่งค่า $error=false เพื่อให้ในส่วนของ ajax ตรวจสอบค่าถ้าได้ค่าคืนมาเป็น false ก็จะไปยังหน้า member.php เมื่อไปหน้า member.php ที่ลองทำการทดสอบค่าว่าค่าใน session ว่างหรือไม่ ปรากฏว่าค่า session เป็นค่าว่าง

*ค่าในหน้า member.php ลงผิด
แก้จาก $_SESSION[$prefix][password] เป็น $_SESSION[$prefix][login][password]

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 23786
Joined: 22/09/2008 6:18 pm
Contact:

Re: ปัญหาการส่งค่า session ใน ajax

Post by mindphp » 26/06/2010 8:38 pm

ลงโค้ดช่วยครอบโค้ดหน่อยครับ
ขั้นต้น ลอง print_r($_SESSION);
ท้ายไฟล์ที่สร้างก่อนครับ และลองดูให้หน้าอื่นๆ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Programming - PHP”

Who is online

Users browsing this forum: No registered users and 31 guests