ถามความเข้าใจเรื่อง SESSION ครับ

Post a reply

Smilies
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: ถามความเข้าใจเรื่อง SESSION ครับ

Re: ถามความเข้าใจเรื่อง SESSION ครับ

by secivon » 25/03/2009 9:55 am

แจ้งความคืบหน้า หลังจากทดสอบดูอีกรอบครับ
ลอง phpinfo() ดูเกี่ยวกับ การกำหนด ค่าว่า session.name ตั้งเป็น PHPSESSID
อันนี้เป็น PHPSESSID ครับ
_COOKIE["PHPSESSID"] ด้วยว่าถูกกำหนด เป็น ค่าเดียวกันหรือเปล่า
$_COOKIE["PHPSESSID"] ในโฮสท์หลักตัวนี้เป็นคนละค่าครับ
แต่ในโฮสท์ที่ทดสอบแล้วได้ผลนี่เป็นตัวเดียวกันครับ


ขอตรวจสอบอะไรอีกหน่อย ได้ข้อมูลเพิ่มแล้วจะมาโพสท์ต่อนะครับ :-D

Re: ถามความเข้าใจเรื่อง SESSION ครับ

by mindphp » 24/03/2009 7:38 pm

ลอง phpinfo() ดูเกี่ยวกับ การกำหนด ค่าว่า session.name ตั้งเป็น PHPSESSID
_COOKIE["PHPSESSID"] ด้วยว่าถูกกำหนด เป็น ค่าเดียวกันหรือเปล่า

Re: ถามความเข้าใจเรื่อง SESSION ครับ

by secivon » 24/03/2009 6:56 pm

ขอบคุณมากครับ :mrgreen:

เท่าที่ลองดู work บน host ตัวนึง แต่เหมือนจะยังไม่ work บน host ตัวหลักแฮะ :?
แต่ได้ keyword แล้ว เดี๋ยวจะลองไปศึกษาต่อนะครับ ว่ามันมี PHP / WebServer Configuration อะไรที่เกี่ยวข้องบ้าง

ปล. ถ้าปัญหาตัวเองแก้ได้แล้วก็ลองดูๆ กระทู้อื่นๆ บ้างนะครับเผื่อจะได้ช่วยคนอื่นได้บ้าง :-D :-D
แฮ่ๆ ถ้าเป็นคำถามที่น่าสนใจ ส่วนใหญ่ก็จะไปแจมล่ะครับ :P
แต่ถ้าเกรียนมาขอการบ้านนี่ เห็นมากๆแล้วลมสันดานขึ้นจริงๆ :angry:

Re: ถามความเข้าใจเรื่อง SESSION ครับ

by mindphp » 24/03/2009 6:03 pm

PHPSESSID
ลองดู function session_set_cookie_params()
โดยกำหนดเช่น
session_set_cookie_params(0, '/', '.ชื่อโดเมนหลัก');
0 คือ lifetime คือ อายุของเซสชันคุกกี้, ในหน่วยวินาที. กำหนดให้เป็น 0 เพื่อให้ เวลา ปิด browser แล้ว ให้ มันมาไป
ก่อนที่จะประกาศ
session_start();

ปล. ถ้าปัญหาตัวเองแก้ได้แล้วก็ลองดูๆ กระทู้อื่นๆ บ้างนะครับเผื่อจะได้ช่วยคนอื่นได้บ้าง :-D :-D

Re: ถามความเข้าใจเรื่อง SESSION ครับ

by secivon » 24/03/2009 5:26 pm

รบกวนถามต่อครับ ว่าเป็นไปได้หรือเปล่าครับ ที่จะให้ ตัวแปร $_SESSION สามารถมองเห็นกันจากคนละ subdomain

ตอนนี้ subdomain ของตัวหลัก ( admin.example.com ) ต้องการใช้ค่าของ session ที่ set ไว้ใน domain ( example.com) หลักแล้วน่ะครับ
อีกปัญหาก็คือ user เจ้าปัญหา เดี๋ยวก็เข้าเว็บไซท์ผ่าน example.com เดี๋ยวก็ www.example.com :evil:
(พอดีมี process การ"กระโดด" ไปๆมาๆระหว่างเวบไซท์หลักกับเว็บไซท์อื่น ครับ ถ้า user เข้าจาก example.com แล้วในตอนสั่งให้ "กระโดด" กลับ ไปที่ www.example.com มันจะมองไม่เห็น session ที่ set ไว้แล้วน่ะครับ )


ขอบคุณมากครับ :biggrin:

Re: ถามความเข้าใจเรื่อง SESSION ครับ

by mindphp » 09/03/2009 1:37 am

demonxiii wrote:คือ ผมอ่านแล้วลองเขียนมานานพอควร แต่บางครั้งก็มีปัญหาคือ เลยอยากถามว่าจากความเข้าใจที่ได้ลองเขียนนะครับ

1. SESSION ต้องมีการใช้ session_start() ทุกครั้งใช่ไมครับ

2. SESSION จะเป็นการจำค่าตัวแปรนั้นๆ ในหน้า PAGE ซึ่งแม้รีเฟรช ค่านั้นก็ยังอยู่ แต่เมื่อไปหน้าอื่น SESSION นั้นจะคงอยู่เหมือนเดิม แต่หากเราไม่เรียกฟังชั่น session_start() แม้เราเรียกตัวแปร SESSION นั้นออกมา ก็ไม่มีค่าเพราะถือว่าไม่มีการเรียกใช้ SESSION ถูกไมครับ ?

3. unset คำสั่งนี้ใช้ เคลียค่า SESSION เฉพาะตัว แล้วถ้า session_destroy() จะเคลียค่า SESSION ทุกตัวออกหมดเลยใช่ไมครับ

4. การเรียก session_start() จะต้องเรียกก่อนที่ส่งผลออกไป เช่น คำสั่ง echo หรือ อะไรที่เป็นการแสดงผล หากมีการส่งผลไปแล้วจะทำให้ session ERROR

5. การประกาศค่า $_SESSION('x') แม้มีการส่งการแสดงผลออกไปแล้ว แล้วก็ยังกำหนดตัวแปรได้อยู่ ? กรณีที่ session_start() อยู่ในตำแหน่งที่ถูกต้อง (อันนี้ผมสงสัยมาก)

ทั้งหมดนี้ผมเข้าใจถูกไมครับ หรือว่ามันมีอะไรเพิ่มเติมอีก เพราะรู้สึกว่าอยู่กะมันนานละ แต่ยังเหมือนไม่เข้าใจมันดี เลยอยากเคลียความเข้าใจกะมันก่อน
ข้อ 1. ขึ้นอยู่กับ config ของ php ครับแต่แนะนำให้ ใช้ session_start() เมื่อจะใช้งาน Session
ข้อ 2. SESSION เป็นตัวแปล Supper global สามารถส่งไปใช้งานหน้าอื่นๆได้ หรือ จะเรียกใช้มันเมื่อไรก็ได้ ถ้า ข้อ 1. OK แล้ว
ข้อ 3. unset เป็น function ที่ใช้ยกเลิกตัวแปลครับ ใช้กับ ตัวแปลปรกติ หรือ ตัวแปลข้อ 2. ก็ได้ เช่นเมื่อเราประกาศ $_SESSION[yyy] ส่วน session_destroy() อันนี้เข้าใจถูกแล้วครับ
ข้อ 4. ใช่ครับ แต่ก็มีวิธีแก้ไข ถ้าจำเป็นต้องส่ง output ออกก่อนใช้ session_start() ลองดูในบทความครับ
ข้อ 5. การประกาศค่า $_SESSION('x') เขียนผิดนะครับ ต้องเขียนเป็น $_SESSION['x'] เป็นตัวแปล Supper global กำหนดเป็น array ซึ่ง กำหนดกี่มิติก็ได้ เช่นถ้าจะกำหนดเป็น 2 มิติก็ เขียนเป็น $_SESSION['x']['y'] = 'mindphp.com'
:-D

ถามความเข้าใจเรื่อง SESSION ครับ

by demonxiii » 09/03/2009 12:17 am

คือ ผมอ่านแล้วลองเขียนมานานพอควร แต่บางครั้งก็มีปัญหาคือ เลยอยากถามว่าจากความเข้าใจที่ได้ลองเขียนนะครับ

1. SESSION ต้องมีการใช้ session_start() ทุกครั้งใช่ไมครับ

2. SESSION จะเป็นการจำค่าตัวแปรนั้นๆ ในหน้า PAGE ซึ่งแม้รีเฟรช ค่านั้นก็ยังอยู่ แต่เมื่อไปหน้าอื่น SESSION นั้นจะคงอยู่เหมือนเดิม แต่หากเราไม่เรียกฟังชั่น session_start() แม้เราเรียกตัวแปร SESSION นั้นออกมา ก็ไม่มีค่าเพราะถือว่าไม่มีการเรียกใช้ SESSION ถูกไมครับ ?

3. unset คำสั่งนี้ใช้ เคลียค่า SESSION เฉพาะตัว แล้วถ้า session_destroy() จะเคลียค่า SESSION ทุกตัวออกหมดเลยใช่ไมครับ

4. การเรียก session_start() จะต้องเรียกก่อนที่ส่งผลออกไป เช่น คำสั่ง echo หรือ อะไรที่เป็นการแสดงผล หากมีการส่งผลไปแล้วจะทำให้ session ERROR

5. การประกาศค่า $_SESSION('x') แม้มีการส่งการแสดงผลออกไปแล้ว แล้วก็ยังกำหนดตัวแปรได้อยู่ ? กรณีที่ session_start() อยู่ในตำแหน่งที่ถูกต้อง (อันนี้ผมสงสัยมาก)

ทั้งหมดนี้ผมเข้าใจถูกไมครับ หรือว่ามันมีอะไรเพิ่มเติมอีก เพราะรู้สึกว่าอยู่กะมันนานละ แต่ยังเหมือนไม่เข้าใจมันดี เลยอยากเคลียความเข้าใจกะมันก่อน

Top