ถามเกียวกับ session ของ facebook หน่อยคับ
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ถามเกียวกับ session ของ facebook หน่อยคับ

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
มันต้องลงอะไรเพิ่มใน server หรือเปล่าคับ php ใช้ version ไหนคับ

fb_ca_chain_bundle.crt มีไฟล์นี้ด้วยหรอ
ลองเอาโค้ดหน้า test.php มาดูเผื่อแนะนำได้
หรือไม่ก็ เอาตัวอย่าง ในหน้า
https://www.ninenik.com/สร้าง_login_logout_และกำหนด_permission_ของ_facebook_ด้วย_php_sdk_-352.html
ก็อบไปลองรันดู

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | <?php session_start(); // กำหนดไว้ กรณีอาจได้ใช้ตัวแปร session include ( "facebook.php" ); // เรียกใช้งานไฟล์ php-sdk สำหรับ facebook // สร้าง Application instance. $facebook = new facebook( array ( 'appId' => '189905577691269' , // appid ที่ได้จาก facebook 'secret' => '303705ed0bd5e167e525cd72ae2eacc7' , // app secret ที่ได้จาก facebook 'cookie' => true, // อนุญาตใช้งาน cookie )); Facebook:: $CURL_OPTS [CURLOPT_CAINFO] = 'FULL_PATH_TO_CA_CERT_FILE' ; // appId และ secret ดูวิธีการได้มาจาก // https://www.ninenik.com/สร้าง_comment_ด้วย_social_plugins_ใน_facebook_api_อย่างง่ายดาย-291.html // ตรวจสอบสถานะการ login $session = $facebook ->getSession(); // สร้างฟังก์ชันไว้สำหรัดทดสอบ การแสดงผลการใช้งาน function pre( $varUse ){ echo "<pre>" ; print_r( $varUse ); echo "</pre>" ; } // สร้างตัวแปรสำหรับเก็บข้อมูลของสมาชิกเมื่อได้ทำการ login แล้ว $me = null; // ถ้ามีการ login ดึงข้อมูลสมาชิกที่ login มาเก็บที่ตัวแปร $me เป็น array if ( $session ){ try { $uid = $facebook ->getUser(); // เก็บ id ของผู้ใช้ไว้ที่ตัวแปร $uid กรณีมีการล็อกอิน facebook อยู่ $me = $facebook ->api( '/me' ); // ดึงข้อมูลผู้ใช้ปัจจุบันทีล็อกอิน facebook มาเก็บในตัวแปร $me } catch (FacebookApiException $e ) { // กรณีเกิดข้อผิดพลากแสดงผลลัพธ์ข้อผิดพลาดที่เกิดขึ้น error_log ( $e ); } } echo $uid ; ?> name = <?php echo $me [ 'name' ]; ?> <?php //////////////////////////////////////////////////////////////////////////////// /// ส่วนของการใช้งาน /////////////////////////////////////////////////////////////////////////////////// if (isset( $_GET [ 'logout' ])){ // ทำการ logout อย่างสมบูรณ์ $facebook ->setSession(null); // ล่างค่า session ของ facebook header( "Location:" . $_SERVER [ 'PHP_SELF' ]); //ลิ้งค์ไปหน้าที่ต้องการเมื่อ logout เรียบร้อยแล้ว } if ( $me ){ // กรณีเงื่อน login อยู่ // เก็บค่า url ไว้ในตัวแปร $logoutUrl สำหรับ logout กรณีที่ได้ทำการ login อยู่ // $logoutUrl = $facebook->getLogoutUrl(); // การกำหนดแบบปกติ // การกำหนดแบบปกติ ค่า session ของ facebook ยังคงอยู่ แนะนำเป็นวิธีด้านล่าง // next คือ url ที่ต้องการลิ้งค์ไป เมื่อ logout แล้ว ในที่นี้กำหนด เป็น url ปัจจุบัน // แต่เพิ่มตัวแปร get ชื่อ logout เพื่อกลับมาเข้าเงื่อนไข ทำลาย session ของ facebook $logoutUrl = $facebook ->getLogoutUrl( array ( ) ); } else { // กรณีเงื่อนไข logout // เก็บค่า url ไว้ในตัวแปร $loginUrl สำหรับ login กรณีที่ยังไม่ได้ login // $loginUrl = $facebook->getLoginUrl(); // กำหนด url กรณีใช้งานปกติ // กำหนด url สำหรับ login กรณีเพิ่มเติมพิเศษ // next: คือ url ที่ต้องการใช้ลิ้งค์ไป เมื่อ login สำเร็จ // cancel_url: คือ url ที่ต้องการใช้ลิ้งค์ไป เมื่อ ผู้ใช้ยกเลิกการ login // req_perms: กำหนด การร้องขอส่วนของ permission เพิ่มเติมที่ต้องการให้ผู้ใช้อนุญาต // display: รูปแบบหน้า login ที่ต้องการแสดง ปกติค่าจะเป็น page ถ้าไม่ได้กำหนด // จะเป็นหน้า เพจ login ของ facebook ปกติ // การกำหนดแบบ popup จะมีปุ่ม cancel ให้เลือก และใช้กับ cancel_url แนะนำให้ใช้เป็น popup $loginUrl = $facebook ->getLoginUrl( array ( 'req_perms' => 'offline_access,user_photos' , // คั่นแต่ละค่าด้วย ,(comma) 'display' => 'popup' // page หรือ popup ) ); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <html xmlns= "http://www.w3.org/1999/xhtml" <head> <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> <title>facebook use php sdk login logout</title> </head> <body> <?php if ( $me ){ ?> <a href= "<?=$logoutUrl?>" >Facebook Logout</a> <?php } else { ?> <a href= "<?=$loginUrl?>" >Facebook Login</a> <?php } ?> <?php pre( $me ); ?> </body> </html> |

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | <?php session_start(); // กำหนดไว้ กรณีอาจได้ใช้ตัวแปร session include ( "facebook.php" ); // เรียกใช้งานไฟล์ php-sdk สำหรับ facebook // สร้าง Application instance. $facebook = new facebook( array ( 'appId' => '189905577691269' , // appid ที่ได้จาก facebook 'secret' => '303705ed0bd5e167e525cd72ae2eacc7' , // app secret ที่ได้จาก facebook 'cookie' => true, // อนุญาตใช้งาน cookie )); // ตรวจสอบสถานะการ login $session = $facebook ->getSession(); // สร้างฟังก์ชันไว้สำหรัดทดสอบ การแสดงผลการใช้งาน function pre( $varUse ){ echo "<pre>" ; print_r( $varUse ); echo "</pre>" ; } // สร้างตัวแปรสำหรับเก็บข้อมูลของสมาชิกเมื่อได้ทำการ login แล้ว $me = null; // ถ้ามีการ login ดึงข้อมูลสมาชิกที่ login มาเก็บที่ตัวแปร $me เป็น array if ( $session ){ try { $uid = $facebook ->getUser(); // เก็บ id ของผู้ใช้ไว้ที่ตัวแปร $uid กรณีมีการล็อกอิน facebook อยู่ $me = $facebook ->api( '/me' ); // ดึงข้อมูลผู้ใช้ปัจจุบันทีล็อกอิน facebook มาเก็บในตัวแปร $me } catch (FacebookApiException $e ) { // กรณีเกิดข้อผิดพลากแสดงผลลัพธ์ข้อผิดพลาดที่เกิดขึ้น error_log ( $e ); } } echo $uid ; ?> name = <?php echo $me [ 'name' ]; ?> <?php //////////////////////////////////////////////////////////////////////////////// /// ส่วนของการใช้งาน /////////////////////////////////////////////////////////////////////////////////// if (isset( $_GET [ 'logout' ])){ // ทำการ logout อย่างสมบูรณ์ $facebook ->setSession(null); // ล่างค่า session ของ facebook header( "Location:" . $_SERVER [ 'PHP_SELF' ]); //ลิ้งค์ไปหน้าที่ต้องการเมื่อ logout เรียบร้อยแล้ว } if ( $me ){ // กรณีเงื่อน login อยู่ // เก็บค่า url ไว้ในตัวแปร $logoutUrl สำหรับ logout กรณีที่ได้ทำการ login อยู่ // $logoutUrl = $facebook->getLogoutUrl(); // การกำหนดแบบปกติ // การกำหนดแบบปกติ ค่า session ของ facebook ยังคงอยู่ แนะนำเป็นวิธีด้านล่าง // next คือ url ที่ต้องการลิ้งค์ไป เมื่อ logout แล้ว ในที่นี้กำหนด เป็น url ปัจจุบัน // แต่เพิ่มตัวแปร get ชื่อ logout เพื่อกลับมาเข้าเงื่อนไข ทำลาย session ของ facebook $logoutUrl = $facebook ->getLogoutUrl( array ( ) ); } else { // กรณีเงื่อนไข logout // เก็บค่า url ไว้ในตัวแปร $loginUrl สำหรับ login กรณีที่ยังไม่ได้ login // $loginUrl = $facebook->getLoginUrl(); // กำหนด url กรณีใช้งานปกติ // กำหนด url สำหรับ login กรณีเพิ่มเติมพิเศษ // next: คือ url ที่ต้องการใช้ลิ้งค์ไป เมื่อ login สำเร็จ // cancel_url: คือ url ที่ต้องการใช้ลิ้งค์ไป เมื่อ ผู้ใช้ยกเลิกการ login // req_perms: กำหนด การร้องขอส่วนของ permission เพิ่มเติมที่ต้องการให้ผู้ใช้อนุญาต // display: รูปแบบหน้า login ที่ต้องการแสดง ปกติค่าจะเป็น page ถ้าไม่ได้กำหนด // จะเป็นหน้า เพจ login ของ facebook ปกติ // การกำหนดแบบ popup จะมีปุ่ม cancel ให้เลือก และใช้กับ cancel_url แนะนำให้ใช้เป็น popup $loginUrl = $facebook ->getLoginUrl( array ( 'req_perms' => 'offline_access,user_photos' , // คั่นแต่ละค่าด้วย ,(comma) 'display' => 'popup' // page หรือ popup ) ); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <html xmlns= "http://www.w3.org/1999/xhtml" <head> <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> <title>facebook use php sdk login logout</title> </head> <body> <?php if ( $me ){ ?> <a href= "<?=$logoutUrl?>" >Facebook Logout</a> <?php } else { ?> <a href= "<?=$loginUrl?>" >Facebook Login</a> <?php } ?> <?php pre( $me ); ?> </body> </html> |
อันนี้นะคับ

ไฟล์น่าจะติด BOM ทำให้ session ไม่ทำงาน
เอา BOM ออก
ถ้าใช้ dream เปิดไฟล์ คลิกขวา
- เลือก page properties
- คลิกที่ Title/Encoding
- หาคำว่า BOM แล้ว เอาเครื่องหมายคลิกถูก ด้านหน้าออก

ลองดูแล้วครับ ไม่ได้ติ๊กไว้อยู่แล้วคับ
ปัญหจะเกิดจากอะไรได้อีกคับ

ทำไงดีคับไม่ได้สักที

ถ้า Server เป็น windows Os จะเกี่ยวกับไฟล์ fb_ca_chain_bundle.crt เป็นใบ Cer เพื่อความปลอดภัย มันอาจติดปัญหาที่ CH 60
