Session Cross Subdomain

ตามชื่อนั่นแหละครับ การใช้งาน SESSION ข้าม Subdomain บน Server ถ้ายังไม่เข้าใจว่ามันจะทำไปทำไม ผมจะลองยกตัวอย่างให้ เช่น การทำเว็บไซต์ ที่มีหลาย Subdomain เช่น http://www.domain.com และ http://sub.domain.com แต่ต้องการให้ทั้งหมดของเว็บไซต์ สามารถ login เข้าใช้งานเพียงครั้งเดียว หรือ การทำ blog แบบที่ให้ user เป็นแบบ subdomain

ปกติแล้ว SESSION สามารถใช้งานข้ามไดเร็คทอรี่ได้ภายใน domain เดียวกัน ไม่เหมือน Cookie ที่สามารถใช้งานได้เฉพาะไดเร็คทอรี่ใด ไดเร็คทอรี่หนึ่งเท่านั้น SESSION จึงเหมาะที่จะเก็บสถานะการ login มากกว่า Cookie เนื่องจากไม่ต้องกังวลว่าจะอยู่ในไดเร็คทอรี่ใด แต่ SESSION ก็ยังไม่สามารถใช้งานได้ในกรณีที่เว็บเราแบ่งเป็น subdomain แต่! ปัญหานี้แก้ไขได้ครับ

.htaccess
php_value session.cookie_domain ".mysite.com"


สร้างไฟล์ .htaccess แล้วใส่โค้ดนี้ลงไป แล้วก็เอาไปวาง ที่ root ของ Server จะใช้ได้ตลอดทุก subdomain ครับ (ถ้าไม่ได้ ก็ใส่ไฟล์นี้ ที่ root ของทุก subdomain เลยครับ)
การกำหนดค่าที่ถูกต้องของวิธีนี้ คือตุ้องมี จุด อยู่หน้า โดเมนด้วยนะครับ ถึงจะทำงาน

PHP
ini_set('session.cookie_domain', '.mysite.com') // ใส่บรรทัดบนสุดของเพจ
session_start();


เขียนลงบนโค้ด PHP โดยตรงในตำแหน่งที่ต้องการจะเรียกใช้ session ซึ่งก็คือ session_start(); วิธีนี้มีข้อเสียที่ต้องเขียนในทุกครังที่เรียกใช้ ไม่เหมือนกับวิธีแรกครับ ที่ไม่ต้องแก้ไขโค้ด

ยังมีอีกวิธีนึงที่พอประยุกต์ใช้ได้ครับ คือการใช้ session ที่กำหนดเอง

PHP
session_id($_GET[PHPSESSID]);
session_start();


วิธีนี้คือการใช้ session ที่กำหนดเองครับ โดยตอนเริ่มต้อนเราต้องกำหนดค่า $_GET[PHPSESSID] ไว้ก่อนด้วยตัวเอง อาจได้มาโดยการสุ่มก็ได้ แต่ในเวลาที่ต้องการจะให้ใช้งาน session เดียวกัน ก็ให้ทำการส่งค่านี้ไปยัง เพจที่ต้องการใช้ session เดียวกันได้ เช่น xxx.php?phpsessid=avsbeikmnrv เป็นต้น ก็จะทำให้เพจนั้นๆ ใช้ session เดียวกันกับต้นทางได้ ไม่ว่าจะอยู่ subdomain ไหนก็ตาม
ผู้เขียน goragod โพสต์เมื่อ 31 พ.ค. 2552 เปิดดู 20,107 ป้ายกำกับ session
^