ทำ Single Sign On (ล็อกอินครั้งเดียว ทุกระบบ)
วิธีดึงตัวแปรของ SMF มาใช้โดยคร่าวๆนะครับ
<?php require("./SSI.php"); // ตรงนี้สำคัญ ต้อง link กับไฟล์ ssi.php ก่อน แล้วเราจะสามารถเอาตัวแปรของ smf มาใช้ได้?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<li>
$context['user']['is_guest'] คือ
<?php
echo $context['user']['is_guest'];
?>
</li>
<li>
$context['user']['name'] คือ
<?
echo $context['user']['name'];
?>
</li>
<li>
$ID_MEMBER คือ
<?
echo $ID_MEMBER;
?>
</li>
<?php ssi_logout(); ?>
ส่วนถ้าต้องการจะทำระบบล็อกอินของเรา ให้ smf รู้ว่าเราล็อกอินอยู่ด้วย จะยุ่งยากนิดหน่อย
หลักการจะเป็นแบบนี้ครับ
1. มันจะไปเขียนค่าลงตาราง log_online
2. มันจะดึงค่าต่างๆของ user เก็บไว้ในตัวแปร $context , $user_info, $user_settings โดยรายละเอียดต่างๆจะเก็บอยู่ใน $context["ชื่อฟิล"]
3. มันจะเอาค่าต่างๆไปอัพเดตข้อมูลผ่านฟังก์ชั่น updateMemberData และ updateSettings
แต่ถ้าให้ผมแนะนำนะคับ แบบนี้ดีกว่าครับ
ถ้าจะทำระบบล็อกอิน เวลารับค่าแล้ว ให้มันเข้ามาเช็คในตัว smf ให้เสร็จก่อน
แล้วให้มัน redirect page ไปหน้าที่เราต้องการแทน ในกรณีที่ล็อกอินถูกต้อง แล้วค่อยดึงค่าตัวแปรมาใช้จากตัวอย่างด้านบนครับ
ส่วนคำสั่งในการ redirectpage ของ smf ก็จะมีรูปแบบประมาณนี้คับ
ตัวอย่างการใช้
redirectexit('action=login2;sa=check;member=' . $ID_MEMBER, $context['server']['needs_login_fix']);
ก็คือให้ค้นหาคำว่า... จากไฟล์ ./sources/LogInOut.php
// Some whitelisting for login_url...
if (empty($_SESSION['login_url']))
redirectexit();
else
{
ตรงนี้แหละครับ คือถ้าล็อกอินถูกต้อง เราต้องการให้ไปที่หน้าไหน ก็ใส่ login url เข้าไปครับ
4. แค่นี้ก็จะทำให้เราไม่ต้องสนว่าเราต้องอัพเดตตัวแปรไหนของ SMF บ้าง แต่ให้ SMF มัน authentication user ให้เรา แล้วเราค่อยดึงค่ามาใช้เทียบเอา แบบนี้ง่ายกว่าเยอะครับ ถ้างงตรงไหน ไม่เข้าใจก็เขียนถามไว้คับ มีเวลาจะเข้ามาตอบให้ครับ
อยากเข้าใจ SMF ต้องค่อยๆแกะตัวแปรไป แล้วก็อ่าน comment คับ ลองแก้ไปเรื่อยๆ
ที่มา :
www.art2bempire.com