สอบถาม เขียน code check-login อีกรอบค่ะ

เริ่มโดย pum_pam, 17 กรกฎาคม 2014, 14:01:49

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

pum_pam

อ้างถึงจาก: dekdoo ใน 29 กรกฎาคม 2014, 10:52:04
ลองเอา session_start(); ขึ้นเป็นบรรทัดแรกสุด
เอาไว้ก็ไม่ได้เหมือนเดิมค่ะ

ttong

ที่หน้า check-login.php ก่อนจะ refresh ไปหน้า tes.php
ลองแบบนี้ดูว่ามี อะไรออกมาหรือเปล่า
echo $_SESSION["username"];
echo $_SESSION["name"];


ลองทดสอบบนเครื่องตัวเองก่อนนะครับ
หากเครื่องตัวเองไม่มีปัญหา ค่อยลองทดสอบบนเซิร์ฟเวอร์

pum_pam

อ้างถึงจาก: ttong ใน 29 กรกฎาคม 2014, 11:37:46
ที่หน้า check-login.php ก่อนจะ refresh ไปหน้า tes.php
ลองแบบนี้ดูว่ามี อะไรออกมาหรือเปล่า
echo $_SESSION["username"];
echo $_SESSION["name"];


ลองทดสอบบนเครื่องตัวเองก่อนนะครับ
หากเครื่องตัวเองไม่มีปัญหา ค่อยลองทดสอบบนเซิร์ฟเวอร์

ค่ะทดสอบแล้วค่ะใช้งานได้ปกติไม่มีปัญหาอะไรเลยข้อมูลออกมาหมดทุกขั้นตอน แต่พอขึ้นโฮสต์ หน้า tes.php มีปัญหาค่ะ

ยิ้มโค้ด.คอม

อ้างถึงจาก: pum_pam ใน 29 กรกฎาคม 2014, 11:52:19
อ้างถึงจาก: ttong ใน 29 กรกฎาคม 2014, 11:37:46
ที่หน้า check-login.php ก่อนจะ refresh ไปหน้า tes.php
ลองแบบนี้ดูว่ามี อะไรออกมาหรือเปล่า
echo $_SESSION["username"];
echo $_SESSION["name"];


ลองทดสอบบนเครื่องตัวเองก่อนนะครับ
หากเครื่องตัวเองไม่มีปัญหา ค่อยลองทดสอบบนเซิร์ฟเวอร์

ค่ะทดสอบแล้วค่ะใช้งานได้ปกติไม่มีปัญหาอะไรเลยข้อมูลออกมาหมดทุกขั้นตอน แต่พอขึ้นโฮสต์ หน้า tes.php มีปัญหาค่ะ

หากที่ Localhost ได้ปกติ แล้วพออัปขึ้นเซริฟ์เวอร์จริงแล้วมีปัญหา อันนี้ผมว่าน่าจะเกี่ยวกับเวอร์ชั่น PHP หรือการ Config ค่าของโฮสต์น่ะครับ ไม่ลองเอาโค้ดล่าสุดปัจจุบันที่ยังมีปัญหามาดูอ่ะครับ เผื่อแก้ไปหลายอย่างแล้วมันไปผิดตรงอื่นอีกครับ

ปล. โฮสต์ใช้ค่า Session ได้หรือเปล่าครับ ลองเอาเฉพาะโค้ดนี้แล้วลองไปรันบนโฮสต์ดู
<?php
session_start
();
$_SESSION['test']='Session Ok';
echo 
$_SESSION['test'];
?>


หากไม่มีค่า Session Ok ออกมาก็มุ่งไปที่โฮสต์เลยครับ เพราะนั่นคือ Session บนโฮสต์ไม่ทำงาน แต่หากมีค่าก็เอาโค้ดล่าสุดที่อัปบนโฮสต์แล้วไม่ได้มาดูครับ

pum_pam

#24
อ้างถึงจาก: killerb ใน 29 กรกฎาคม 2014, 14:27:18
อ้างถึงจาก: pum_pam ใน 29 กรกฎาคม 2014, 11:52:19
อ้างถึงจาก: ttong ใน 29 กรกฎาคม 2014, 11:37:46
ที่หน้า check-login.php ก่อนจะ refresh ไปหน้า tes.php
ลองแบบนี้ดูว่ามี อะไรออกมาหรือเปล่า
echo $_SESSION["username"];
echo $_SESSION["name"];


ลองทดสอบบนเครื่องตัวเองก่อนนะครับ
หากเครื่องตัวเองไม่มีปัญหา ค่อยลองทดสอบบนเซิร์ฟเวอร์

ค่ะทดสอบแล้วค่ะใช้งานได้ปกติไม่มีปัญหาอะไรเลยข้อมูลออกมาหมดทุกขั้นตอน แต่พอขึ้นโฮสต์ หน้า tes.php มีปัญหาค่ะ

หากที่ Localhost ได้ปกติ แล้วพออัปขึ้นเซริฟ์เวอร์จริงแล้วมีปัญหา อันนี้ผมว่าน่าจะเกี่ยวกับเวอร์ชั่น PHP หรือการ Config ค่าของโฮสต์น่ะครับ ไม่ลองเอาโค้ดล่าสุดปัจจุบันที่ยังมีปัญหามาดูอ่ะครับ เผื่อแก้ไปหลายอย่างแล้วมันไปผิดตรงอื่นอีกครับ

ปล. โฮสต์ใช้ค่า Session ได้หรือเปล่าครับ ลองเอาเฉพาะโค้ดนี้แล้วลองไปรันบนโฮสต์ดู
<?php
session_start
();
$_SESSION['test']='Session Ok';
echo 
$_SESSION['test'];
?>


หากไม่มีค่า Session Ok ออกมาก็มุ่งไปที่โฮสต์เลยครับ เพราะนั่นคือ Session บนโฮสต์ไม่ทำงาน แต่หากมีค่าก็เอาโค้ดล่าสุดที่อัปบนโฮสต์แล้วไม่ได้มาดูครับ

ค่า session ขึ้น ok ค่ะ


หน้า checklogin.php (ถ้ารันในหน้านี้เลยข้อมูลแสดงไม่มีปัญหาค่ะ)

<?php
ob_start();
session_start();
include('connect.php');
header("content-type: text/html; charset=UTF-8");
$username=trim($_REQUEST[username]);
$password=md5(trim($_REQUEST[password]));
$sql=mysql_query("Select * From tb_member Where username='$username' && password='$password'");
if(mysql_num_rows($sql)>0){


while($row=mysql_fetch_array($sql)){

$_SESSION['id_mem']=$row['id_mem'];
$_SESSION['username']=$row['username'];
$_SESSION['name']=$row['name'];
$_SESSION['province']=$row['province'];
$_SESSION['status']=$row['status'];
mysql_query("Update tb_member Set login=NOW() Where username='$row[username]'");

}


echo"กำลังเข้าสู่ระบบ<br>";

print_r($_SESSION);

//echo"<meta http-equiv='refresh' content='2;URL=tes.php'>";


}else{
echo"ไม่สามารถเข้าสู่ระบบได้";
//echo"<meta http-equiv='refresh' content='2;URL=./.'>";
}

ob_end_flush();
?>

หน้า tes.php (ไม่มีข้อมูลสมาชิกส่งไปค่ะเป็นค่าว่าง)

<?php
ob_start();
session_start();
header("content-type: text/html; charset=UTF-8");
?>

<?Php echo $_SESSION["username"]; ?>

<?Php echo $_SESSION["name"]; ?>

ดูที่ phpinfo ตอนนี้  ใช้ php ver 5.3.3 ค่ะ
register_globals = off
register_argc_argv = On
magic_quotes_gpc = On
output_buffering = 4096
session.cookie_path = "/"
Session Support enabled

ยิ้มโค้ด.คอม

ปิด  ob_end_flush(); ที่หน้า tes.php ดูครับ

pum_pam

อ้างถึงจาก: killerb ใน 29 กรกฎาคม 2014, 16:07:14
ปิด  ob_end_flush(); ที่หน้า tes.php ดูครับ

ลองปิดดูแล้วก็ไม่ได้ค่ะ

ttong

ผมว่าลองติดต่อกับทาง Hosting ดีกว่าครับ
ให้ทางนั้นเค้าตรวจสอบให้

ยิ้มโค้ด.คอม

อ้างถึงจาก: pum_pam ใน 29 กรกฎาคม 2014, 16:11:55
อ้างถึงจาก: killerb ใน 29 กรกฎาคม 2014, 16:07:14
ปิด  ob_end_flush(); ที่หน้า tes.php ดูครับ

ลองปิดดูแล้วก็ไม่ได้ค่ะ

checklogin.php กับ tes.php นี่อยู่ใน directory เดียวกันหรือเปล่าครับ แล้วลองเอา copy โค้ดนี้ไปแทนที่ในหน้า tes.php ดูครับ

<?php
ob_start
();
session_start();
header("content-type: text/html; charset=UTF-8");

echo 
'username='.$_SESSION['username'];
echo 
'username='.$_SESSION['name'];

ob_end_flush();
?>


มันมีอะไรออกมาไหมครับ

pum_pam

#29
อ้างถึงจาก: killerb ใน 29 กรกฎาคม 2014, 16:18:16
อ้างถึงจาก: pum_pam ใน 29 กรกฎาคม 2014, 16:11:55
อ้างถึงจาก: killerb ใน 29 กรกฎาคม 2014, 16:07:14
ปิด  ob_end_flush(); ที่หน้า tes.php ดูครับ

ลองปิดดูแล้วก็ไม่ได้ค่ะ

checklogin.php กับ tes.php นี่อยู่ใน directory เดียวกันหรือเปล่าครับ แล้วลองเอา copy โค้ดนี้ไปแทนที่ในหน้า tes.php ดูครับ

<?php
ob_start
();
session_start();
header("content-type: text/html; charset=UTF-8");

echo 
'username='.$_SESSION['username'];
echo 
'username='.$_SESSION['name'];

ob_end_flush();
?>


มันมีอะไรออกมาไหมครับ
ออกมาแค่นี้ค่ะ
username=
name=  
อยู่ root นอกสุดเหมือนกันค่ะ

ยิ้มโค้ด.คอม

อ้างถึงจาก: pum_pam ใน 29 กรกฎาคม 2014, 16:35:04
อ้างถึงจาก: killerb ใน 29 กรกฎาคม 2014, 16:18:16
อ้างถึงจาก: pum_pam ใน 29 กรกฎาคม 2014, 16:11:55
อ้างถึงจาก: killerb ใน 29 กรกฎาคม 2014, 16:07:14
ปิด  ob_end_flush(); ที่หน้า tes.php ดูครับ

ลองปิดดูแล้วก็ไม่ได้ค่ะ

checklogin.php กับ tes.php นี่อยู่ใน directory เดียวกันหรือเปล่าครับ แล้วลองเอา copy โค้ดนี้ไปแทนที่ในหน้า tes.php ดูครับ

<?php
ob_start
();
session_start();
header("content-type: text/html; charset=UTF-8");

echo 
'username='.$_SESSION['username'];
echo 
'username='.$_SESSION['name'];

ob_end_flush();
?>


มันมีอะไรออกมาไหมครับ
ออกมาแค่นี้ค่ะ
username=
name=  
อยู่ root นอกสุดเหมือนกันค่ะ


ที่เทสนี่เทสด้วยการ Login ใหม่เลยน่ะครับ แต่ถ้ายังไม่ได้แล้วคงต้องถามทาง HOst ดูครับ เพราะดูอาการแล้วก็ไม่น่าจะมีอะไรแล้ว

tlecreate

ไม่รู้เหมือนผมป่าว session_start(); เอาขึ้น host ใช้ไม่ได้เลย ขึ้น error ต้องสร้าง file ใหม่ที่เครื่อง server แล้วโหลดกลับมาแก้ แล้วอัพขึ้นไป ก็ใช้ได้ ของผมน่าจะเกี่ยวกับ charset ไฟล์มันเป็น ASCI หรือ UTF-8 ต้องอะไหนไม่รู้


แนะนำเพิ่มเติม หน้าก่อน login เก็บ $_SESSION['x'] = session_id(); เพิ่มไปด้วยครับ
หน้า check ให้ check  $_POST['user'] == $row['user'] && $_SESSION['x'] == session_id(); ป้องกันการ ดักแล้วปลอม session ไปใช้อีกเครื่องครับ

pum_pam

อ้างถึงจาก: pum_pam ใน 29 กรกฎาคม 2014, 16:35:04
อ้างถึงจาก: killerb ใน 29 กรกฎาคม 2014, 16:18:16
อ้างถึงจาก: pum_pam ใน 29 กรกฎาคม 2014, 16:11:55
อ้างถึงจาก: killerb ใน 29 กรกฎาคม 2014, 16:07:14
ปิด  ob_end_flush(); ที่หน้า tes.php ดูครับ

ลองปิดดูแล้วก็ไม่ได้ค่ะ

checklogin.php กับ tes.php นี่อยู่ใน directory เดียวกันหรือเปล่าครับ แล้วลองเอา copy โค้ดนี้ไปแทนที่ในหน้า tes.php ดูครับ

ค่ะทดสอบ login ใหม่เลยค่ะ

<?php
ob_start
();
session_start();
header("content-type: text/html; charset=UTF-8");

echo 
'username='.$_SESSION['username'];
echo 
'username='.$_SESSION['name'];

ob_end_flush();
?>


มันมีอะไรออกมาไหมครับ
ออกมาแค่นี้ค่ะ
username=
name=  
อยู่ root นอกสุดเหมือนกันค่ะ


pum_pam

อ้างถึงจาก: tlecreate ใน 29 กรกฎาคม 2014, 23:14:31
ไม่รู้เหมือนผมป่าว session_start(); เอาขึ้น host ใช้ไม่ได้เลย ขึ้น error ต้องสร้าง file ใหม่ที่เครื่อง server แล้วโหลดกลับมาแก้ แล้วอัพขึ้นไป ก็ใช้ได้ ของผมน่าจะเกี่ยวกับ charset ไฟล์มันเป็น ASCI หรือ UTF-8 ต้องอะไหนไม่รู้


แนะนำเพิ่มเติม หน้าก่อน login เก็บ $_SESSION['x'] = session_id(); เพิ่มไปด้วยครับ
หน้า check ให้ check  $_POST['user'] == $row['user'] && $_SESSION['x'] == session_id(); ป้องกันการ ดักแล้วปลอม session ไปใช้อีกเครื่องครับ
ขอบคุณค่ะ แต่นี่ session ใช้งานได้ค่ะแต่ทำงานในหน้าเดียวกันข้ามหน้า page กลายเป็นค่าว่างค่ะ

seowizard

ลองใส่ session_write_close() ก่อนเปลี่ยนไปหน้าอื่น

หรือไม่ก็ลองสร้าง folder ให้ cookie path แล้ว chmod ให้อ่านเขียนได้

dekdoo

#35
ในฐานข้อมูลฟิลด์ username และ password ต้องไม่ใช่ค่าว่าง และ username ไม่ซ้ำกับแถวอื่น

ที่หน้า checklogin.php
จากตรงนี้
echo"กำลังเข้าสู่ระบบ<br>";

print_r($_SESSION);

//echo"<meta http-equiv='refresh' content='2;URL=tes.php'>";


ลองแก้เป็น
header('Location: tes.php');
exit();

pum_pam

ขอบคุณทุกคนนะคะที่พยายามแก้ปัญหาช่วย ตอนนี้ ระบบ session ใช้งานได้ตามปกติแล้วค่ะสรุปต้อง แก้ session.save_path ไปที่ /tmp ก็ใช้งานได้ปกติแล้วค่ะ ไม่มีปัญหาที่ code ค่ะ