ปัญหา session ในphp

ปัญหาคือ ทุกครั้งที่ผม refresh หน้าจอของ IE(เดิม ไม่ได้เปิดใหม่หรือเปลี่ยนแปลงแต่อย่างใด)
หมายเลข session id ที่ได้จะไม่ซำของเดิมเลย
ผมเปิด session_start() แล้ว และก็หากเอา session_start() ออก ก็ได้ยังได้หมายเลข id
ด้วยละครับผมละงงจริงๆ ใน php.ini ผมก็ไม่ได้ ตั้งค่าให้ start session auto เลยนะครับ

---------------
webserver: sun one 6.1
PHP: 4.3.7
OS: win2003 ent

สาเหตุเป็นไปได้หลายกรณีครับ ที่พอนึกออกคือ IE ปิดคุกกี้ หรือไม่ก็คุกกี้เต็ม เพราะ session ก็ต้องใช้คุกกี้เหมือนกัน วิธีแก้คือ ส่ง session id ผ่าน url ($_GET) แล้วกำหนด session id เองโดยอ่านจาก $_GET

khao_lek's picture

ผมลองล้างค่าใน ie ออกทั้งหมด แล้วครับ
ผมลองโดยสร้างเครื่องที่เป็นเครื่องทดสอบ แล้วเอามาเชื่อมต่อกับอีกเครื่องหนึ่ง
โดยใช้สายcross กันครับ เพื่อทดสอบว่าหากใช้ ie จากเครื่องอื่นจะเป็นเหมือน
กันไหมสรุปว่าเป็นเหมือนเดิมครับ

sugree's picture

มี reverse proxy รึเปล่า หรือว่าใช้ proxy หลายตัว

khao_lek's picture

อันนี้ผมไม่ได้ใช้ proxy เลยครับ เอาเครื่อง 2 เครื่องมาต่อกันแล้วทดสอบ
ทั้งใน ie ของตัวมันเอง และ ie ของเครื่องที่เชื่อมกันก็เป็นเหมือนเดิมครับ

sugree's picture

ลองเช็ค header ว่ามันส่งรับอะไรกันแน่

khao_lek's picture

ดังนี้ครับ
code present

C:\wwwroot>php -q test_session.php
PHP Warning:  session_start(): Cannot send session cookie - headers already sent
 in C:\wwwroot\test_session.php on line 2
PHP Warning:  session_start(): Cannot send session cache limiter - headers alrea
dy sent in C:\wwwroot\test_session.php on line 2
<br />
<b>Warning</b>:  session_start(): Cannot send session cookie - headers already s
ent in <b>C:\wwwroot\test_session.php</b> on line <b>2</b><br />
<br />
<b>Warning</b>:  session_start(): Cannot send session cache limiter - headers al
ready sent in <b>C:\wwwroot\test_session.php</b> on line <b>2</b><br />
session_id() = ad426d03e265d1f00a8650e5cea4ebb6

code header

C:\wwwroot>php  test_session.php
Content-type: text/html
X-Powered-By: PHP/4.3.7
Set-Cookie: PHPSESSID=75770d3776893577a59ac953242cf642; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
 
session_id() = 75770d3776893577a59ac953242cf642

code file

<?php
session_start();
echo "session_id() = ".session_id();
?>
sugree's picture

เซิร์ฟเวอร์เป็นวินโดส์เหรอครับ

ปัญหา PHP Warning: session_start(): Cannot send session cookie - headers already sent
in C:\wwwroot\test_session.php on line 2
ลองดูครับว่ามี print อะไรก่อนเรียก session_start หรือเปล่าครับ
หรือก่อนเปิด tag php มีช่องว่างหรือเปล่าครับ แต่จะมีผลต่อ session id ไม่แน่ใจนะครับ

sugree's picture

ใช่ๆ ไม่งั้นก็ใส่ ob_start() ตั้งแต่เริ่ม

khao_lek's picture

ขอบคุณ คุณ sugree และ คุณ kaze มากครับ
มันเป็นโปรแกรมของ vendor แล้วผมต้องมาดูแลต่อนะครับ
เฮ้ิอดูยากเป็นบ้าเลย ตอนนี้ก็ยังต้องไล่อยู่นะครับ
แต่ที่ตัว production ไม่มีปัญหาเลยนะครับ
พอผมมาลองลงกับเครื่อง test ก็เจอปัญหาแบบนี้ละครับ

sugree's picture

น่าจะเป็นที่ php.ini

ถ้าจำไม่ผิดน่าจะเป็น output_handler นะครับ

khao_lek's picture

เดี่ยวไปดูก่อนครับ ขอบคุณครับ

lancaster's picture

Expires: Thu, 19 Nov 1981 08:52:00 GMT

ตรงนี้หมายถึง HTML หรือ Cookie ครับ

sugree's picture

html

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น