ปัญหาที่แก้ไม่ได้สักที งงครับ ขอเชิญท่านผู้รู้ช่วยแก้ปัญหา Session ทีครับ

เริ่มโดย $100perday, 21 เมษายน 2013, 14:27:13

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

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

$100perday

เอาเป็น 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 ครับ

รบกวนผู้รู้ช่วยทีครับ
เหนื่อย..

vii

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


sskzclub

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

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

speca

เซ็ต error_reporting(E_ALL);

แล้วลองทำตามที่คุณ vii แนะนำดูครับ (อย่าพึ่ง redirect หน้า ให้ตรวจสอบดูว่า session ที่ใช้ตรวจสอบเงื่อยไขมีการ assign ค่าตามที่เราต้องการหรือปล่าว)
เว็ปไซต์สำเร็จรูปสำหรับร้านค้าในลักษณะ Pre Order
รับเขียนเว็บ  รับทำเว็บ (เว็บ e-commerce คล้าย lazada อย่าง vnetstore.com ก็ทำมาแล้วจ้า)

MapTwoZa

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

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

ปล. เพิ่งเห็นกว่ากระทู้นี้ นานแล้ว จขกท คงแก้ได้แล้วมั้ง ป่านนี้  :-X
Good code quality Developer :D

speca

อ้างถึงจาก: MapTwoZa ใน 02 พฤษภาคม 2013, 04:58:52
ลองเช็คว่า username/password duplicate ใน database หรือป่าว

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

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

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

kingofdollars

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

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

top18753


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

MapTwoZa

จริงด้วยแฮะ อ่านไม่ดี ถ้างั้น ต้องไล่ทีละ 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 :D

dragons_first

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

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

MapTwoZa

อ้างถึงจาก: dragons_first ใน 02 พฤษภาคม 2013, 08:42:50
@session_start(); = session ไม่ทำงานครับ ต้องเอา@ ออกครับ

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

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

ไม่เชื่อลอง

<?php
@session_start();
echo 
session_id();


แต่ปรกติ ไม่ควรใส่ครับ ถ้าเกิดมัน error มันจะได้แจ้งเตือนว่า header already sent ไรเนี่ยแหละ
Good code quality Developer :D

xvlnw.com

[direct=https://cloudhost.in.th/wordpress-hosting]ツ ⓌⓄⓇⒹⓅⓇⒺⓈⓈ ⒽⓄⓈⓉⒾⓃⒼ [/direct] :wanwan014:  :D
[direct=https://cloudhost.in.th/cloudhosting.html]Cloud Hosting[/direct] [direct=https://cloudhost.in.th/cloudvps.html]Cloud Server[/direct] [direct=https://cloudhost.in.th/vpshosting.html]Cloud VPS Hosting[/direct] [direct=https://cloudhost.in.th/windowsvps.html]Cloud Windows[/direct] Tel: 080-348-0843 LINE: ixvlnw

MapTwoZa

จาก comment ผมอันนี้เลยครับ
http://www.thaiseoboard.com/index.php/topic,316164.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 :D