ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingปัญหาที่แก้ไม่ได้สักที งงครับ ขอเชิญท่านผู้รู้ช่วยแก้ปัญหา Session ทีครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ปัญหาที่แก้ไม่ได้สักที งงครับ ขอเชิญท่านผู้รู้ช่วยแก้ปัญหา Session ทีครับ  (อ่าน 3040 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
$100perday
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 324
ออฟไลน์ ออฟไลน์

กระทู้: 2,032



ดูรายละเอียด
« เมื่อ: 21 เมษายน 2013, 14:27:13 »

เอาเป็น code ก่อนนะครับ

Login.php
<form method=post action=signin.php>
User : <input type=text name=useradmin id=useradmin><br>
Pass : <input type=password name=passadmin id=passadmin><br>
<input type=submit value=OK>
</form>

signin.php
<?php
session_start();
require_once "connect.php";
      $sql = "select * from admin where useradmin = '$_POST[useradmin]' and passadmin = '$_POST[passadmin]'";
      $dbquery = mysql_db_query($db, $sql);
      $num_rows = mysql_num_rows($dbquery);
      $rowLogin = mysql_fetch_array($dbquery);
      if($num_rows == 1){
         $_SESSION['useradmin'] = $rowLogin['useradmin'];
         echo "<meta http-equiv='refresh' content='0;URL=home.php'>";
      }else{
         echo "<meta http-equiv='Content-Type' content='text/html; charset=tis-620' />";
         echo "<script language='javascript'>alert('invalid username & password');</script>";
         echo "<meta http-equiv='refresh' content='0;URL=Login.php'>";
      }
   
?>

home.php
<?
@session_start();
ob_start();
$useradmin = $_SESSION["useradmin"];
if(empty($useradmin))
{
echo "<script>alert('หน้านี้จำกัดเฉพาะ Admin เท่านั้น');history.back();</script>";
exit();
}

?>

ปัญหาตอนนี้คือ login ด้วย user , pass ถูกแล้ว (ย้ำว่าถูกต้องแน่นอนครับ)
มันผ่านไปไฟล์ home.php เลยครับ และขึ้น หน้านี้จำกัดเฉพาะ Admin เท่านั้น ทั้ง ๆที่เคยเขียนอย่างนี้มาก่อน
หรือว่ามันเกี่ยวกับ host ครับ

รบกวนผู้รู้ช่วยทีครับ
« แก้ไขครั้งสุดท้าย: 21 เมษายน 2013, 14:27:49 โดย $100perday » บันทึกการเข้า

เหนื่อย..
vii
Verified Seller
สมุนแก๊งเสียว
*

พลังน้ำใจ: 132
ออฟไลน์ ออฟไลน์

กระทู้: 946



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 21 เมษายน 2013, 14:38:01 »

ก่อนที่จะใช้ meta refresh ไปหน้าอื่น
ให้ลอง echo $rowLogin['useradmin'] ออกมาก่อนว่ามีค่าอะไรหรือเปล่าครับ

บันทึกการเข้า

sskzclub
ก๊วนเสียว
*

พลังน้ำใจ: 118
ออฟไลน์ ออฟไลน์

กระทู้: 482



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 21 เมษายน 2013, 17:13:57 »

if(!$_SESSION["useradmin"]){
echo "<script>alert('หน้านี้จำกัดเฉพาะ Admin เท่านั้น');history.back();</script>";
exit();
}

แบบนี้น่าจะดีกว่าน่ะครับ ลองดูครับ โค้ดสั้นกวาด้วย ^^
บันทึกการเข้า

speca
คนรักเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 110



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 02 พฤษภาคม 2013, 04:41:35 »

เซ็ต
โค๊ด:
error_reporting(E_ALL);

แล้วลองทำตามที่คุณ vii แนะนำดูครับ (อย่าพึ่ง redirect หน้า ให้ตรวจสอบดูว่า session ที่ใช้ตรวจสอบเงื่อยไขมีการ assign ค่าตามที่เราต้องการหรือปล่าว)
บันทึกการเข้า

เว็ปไซต์สำเร็จรูปสำหรับร้านค้าในลักษณะ Pre Order
รับเขียนเว็บ  รับทำเว็บ (เว็บ e-commerce คล้าย lazada อย่าง vnetstore.com ก็ทำมาแล้วจ้า)
MapTwoZa
ก๊วนเสียว
*

พลังน้ำใจ: 75
ออฟไลน์ ออฟไลน์

กระทู้: 366



ดูรายละเอียด
« ตอบ #4 เมื่อ: 02 พฤษภาคม 2013, 04:58:52 »

ลองเช็คว่า username/password duplicate ใน database หรือป่าว

เพราะถ้ามัน duplicate เมื่อไหร่ num rows จะกลายเป็น 2 แล้วจะไปเข้าอีก condition ทันที

ปล. เพิ่งเห็นกว่ากระทู้นี้ นานแล้ว จขกท คงแก้ได้แล้วมั้ง ป่านนี้  Lips Sealed
« แก้ไขครั้งสุดท้าย: 02 พฤษภาคม 2013, 05:00:23 โดย MapTwoZa » บันทึกการเข้า

Good code quality Developer Cheesy
speca
คนรักเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 110



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 02 พฤษภาคม 2013, 05:03:11 »

ลองเช็คว่า username/password duplicate ใน database หรือป่าว

เพราะถ้ามัน duplicate เมื่อไหร่ num rows จะกลายเป็น 2 แล้วจะไปเข้าอีก condition ทันที

ปล. เพิ่งเห็นกว่ากระทู้นี้ นานแล้ว จขกท คงแก้ได้แล้วมั้ง ป่านนี้  Lips Sealed

เจ้าของกระทู้บอกว่ามันผ่านไปหน้า home แล้ว alert  แสดงว่าเข้าเงื่อนไขแล้วครับ  ไม่มี dup
บันทึกการเข้า

เว็ปไซต์สำเร็จรูปสำหรับร้านค้าในลักษณะ Pre Order
รับเขียนเว็บ  รับทำเว็บ (เว็บ e-commerce คล้าย lazada อย่าง vnetstore.com ก็ทำมาแล้วจ้า)
kingofdollars
สมุนแก๊งเสียว
*

พลังน้ำใจ: 95
ออฟไลน์ ออฟไลน์

กระทู้: 830



ดูรายละเอียด
« ตอบ #6 เมื่อ: 02 พฤษภาคม 2013, 07:01:42 »

วิธีเช็ค password กับ username ใน Database ของเจ้าของกระทู้แบบนี้

เสี่ยงต่อการโดน SQL Injection สูงมากๆ ครับ  จะโดน hack เอาได้ง่ายๆ
บันทึกการเข้า

top18753
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 260
ออฟไลน์ ออฟไลน์

กระทู้: 3,682



ดูรายละเอียด
« ตอบ #7 เมื่อ: 02 พฤษภาคม 2013, 07:15:11 »

ภาวะเสี่ยงภัย
บันทึกการเข้า


  
ปิดรับบริการ ชั่วคราว อย่างไม่มีกำหนดนะครับ
MapTwoZa
ก๊วนเสียว
*

พลังน้ำใจ: 75
ออฟไลน์ ออฟไลน์

กระทู้: 366



ดูรายละเอียด
« ตอบ #8 เมื่อ: 02 พฤษภาคม 2013, 07:29:33 »

จริงด้วยแฮะ อ่านไม่ดี ถ้างั้น ต้องไล่ทีละ step ครับ

1. ดู phpinfo ก่อนว่า session enable อยู่ป่าว เช่น สร้าง info.php ขึ้นมาแล้วเข้าไป search หาคำว่า session แล้วดูว่ามัน enable อยู่ป่าว
info.php
โค๊ด:
<?php
phpinfo
();

2.ถ้า Session มัน Enable ไว้ก็ลอง test session ก่อนเลยครับ โดยการสร้างไฟล์ออกมาแบบนี้ แล้ว refresh หลายๆทีดูครับว่ามันแสดงเหมือนเดิมหรือป่าว
session-test.php
โค๊ด:
<?php
session_start
();
echo 
session_id();

ถ้า ข้อ 1 ข้อ 2 ผ่าน แสดงว่า session ทำงานปรกติครับ ต้องไล่ดู code เรา

3. ใน home.php dump session ออกมาดูครับ
โค๊ด:
<?
@session_start();
ob_start();
/*
$useradmin = $_SESSION["useradmin"];
if(empty($useradmin))
{
echo "<script>alert('หน้านี้จำกัดเฉพาะ Admin เท่านั้น');history.back();</script>";
exit();
}
*/
var_dump($_SESSION);
ob_flush();
?>


ถ้า session ใน ข้อ 3 ไม่มี key ชื่อ useradmin แสดงว่า signin.php เฟลครับ
ให้ลองปรับ encode เป็น utf-8 without bom ดู

ถ้ายังไม่หายอีก ตรง num_rows==1 ไม่ต้อง echo meta ครับให้ echo $rowLogin['useradmin'] ออกมาดู
บันทึกการเข้า

Good code quality Developer Cheesy
dragons_first
สมุนแก๊งเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 953



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 02 พฤษภาคม 2013, 08:42:50 »

@session_start(); = session ไม่ทำงานครับ ต้องเอา@ ออกครับ
บันทึกการเข้า

รับทำเว็บไซต์ ตามขอบเขตของลูกค้าราคาเบาๆ

รับแก้สคริปท์ เพิ่มระบบ เปลี่ยนแปลงเลเอาท์เว็บไซต์ จัด cssใหม่ แก้การแสดงผลผิดเพี้ยน
ท่านจะได้รับการบริการที่เป็นกันเอง ราคาไม่แพง ต่อรองได้(แต่ไม่น่าเกลียด) คุยกันฉันมิตร นะฮ๊าฟฟฟฟฟ
MapTwoZa
ก๊วนเสียว
*

พลังน้ำใจ: 75
ออฟไลน์ ออฟไลน์

กระทู้: 366



ดูรายละเอียด
« ตอบ #10 เมื่อ: 02 พฤษภาคม 2013, 09:01:02 »

@session_start(); = session ไม่ทำงานครับ ต้องเอา@ ออกครับ

เติม @ ข้างหน้า คือ suppresses error / warning ครับ

ทำงานปรกติครับ

ไม่เชื่อลอง
โค๊ด:
<?php
@session_start();
echo 
session_id();

แต่ปรกติ ไม่ควรใส่ครับ ถ้าเกิดมัน error มันจะได้แจ้งเตือนว่า header already sent ไรเนี่ยแหละ
« แก้ไขครั้งสุดท้าย: 02 พฤษภาคม 2013, 09:02:45 โดย MapTwoZa » บันทึกการเข้า

Good code quality Developer Cheesy
xvlnw.com
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 493
ออฟไลน์ ออฟไลน์

กระทู้: 5,905



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 02 พฤษภาคม 2013, 09:06:05 »

ต้องลอง Debug ที่ตัวแปร $rowLogin['useradmin'] กับตัวแปร SESSION แล้วหละครับ
บันทึกการเข้า

MapTwoZa
ก๊วนเสียว
*

พลังน้ำใจ: 75
ออฟไลน์ ออฟไลน์

กระทู้: 366



ดูรายละเอียด
« ตอบ #12 เมื่อ: 02 พฤษภาคม 2013, 10:01:05 »

จาก comment ผมอันนี้เลยครับ
http://www.thaiseoboard.com/in...164.msg4397442.html#msg4397442

แล้วผมลองไล่ดู code ไปมาหลายรอบและ
มันไม่มีจุดผิดเลยครับ ชื่อตัวแปลก็ถูกหมด

เลยสรุปแบบนี้ ไปไล่เทสทีละข้อเลย
1. เช็ค phpinfo ถ้า session enable คือ session ทำงานได้
2. test session id ถ้ามันเปลี่ยน แสดงว่า session_start ไม่ทำงาน อาจเกิดจาก cookie ถูก disable ไว้ ทางใดทางหนึ่ง

3. ถ้า 1-2 ทำงานปรกติ เลยขอเดาแบบจริงจังเลยว่า session_start ไม่ติด อาจจะเป็นที่ home.php ก็ได้เพราะใช้ @session_start();
session ไม่ติด แต่ก็ไม่มี error แสดง เลยไม่สามารถดึงข้อมูลใน session ออกมาได้

ไม่ก็เป็นที่ signin.php ครับ
session start ไม่ติด echo error ออกมา แต่ว่า มี echo meta tag ตามมา (ซึ่ง login จะถูกต้องทุกอย่าง เข้าเงื่อนไขถูกต้องทุกอย่าง แต่ session ไม่ได้ถูกบันทึก)
มัน redirect เลยครับ เลยไม่รู้ว่า session start ไม่ติด

ให้ลองปรับ encoding ใน 2 ไฟล์นี้เป็น utf8 without bom ครับ

นอกเหนือจากนี้ คิดไม่ออกและ   wanwan031
บันทึกการเข้า

Good code quality Developer Cheesy
หน้า: [1]   ขึ้นบน
พิมพ์