ฉันจะใช้ค่าเซสชันที่กำหนดเองของฉันใน Wordpress ได้อย่างไร?


17

ฉันจะใช้ค่าเซสชันของตัวเอง (กำหนดเอง) ใน Wordpress ได้อย่างไร
ตัวอย่างเช่น:$_SESSION['myname']="4lvin"

ฉันได้แทรกsession_start()ทุกหน้าแล้วฉันต้องการดังต่อไปนี้

<?php
session_start();
$_SESSION['myname'] = "4lvin";
?>

แต่ไม่สามารถใช้งานได้ทั่วโลก
เพียงแค่ทำงานกับหน้าตัวเอง
มันไม่สามารถโทรได้ทั่วโลกจากหน้าอื่น (ใช้ตรรกะเดียวกัน)


คุณช่วยอธิบายลักษณะเฉพาะของคำถามของคุณได้ไหม
Chip Bennett

1
" ลักษณะเฉพาะของ WordPress คืออะไร " - นั่นหมายความว่าคำถามของคุณเกี่ยวข้องกับWordPressอย่างไร
Chip Bennett

1
ผมเห็นคำถามเกี่ยวกับคุกกี้เซสชั่น ฉันไม่เห็นสิ่งใดเป็นพิเศษสำหรับWordPressซึ่งเป็นสาเหตุที่ฉันขอคำชี้แจง
Chip Bennett

2
ไม่เซสชันและคุกกี้เป็นหัวข้ออินเทอร์เน็ต / เว็บเบราว์เซอร์ทั่วไปซึ่ง WordPress ไม่เชื่อเรื่องพระเจ้าอย่างแท้จริง
Chip Bennett

5
ใช่เซสชันและคุกกี้เป็นหัวข้อทั่วไป แต่นี่เป็นคำถามที่ทำให้เซสชันทำงานกับ WordPress ... และเนื่องจาก WP เองไม่ได้ใช้เซสชันจึงเกี่ยวข้องที่นี่
EAMann

คำตอบ:


13

แก้ไข: "ปลั๊กอินด้านล่างจะไม่สามารถใช้ได้อีกดังนั้นโปรดใช้ปลั๊กอินแทน: ปลั๊กอินเซสชัน WordPress "

: มีดีปลั๊กอิน WordPress ดัดแปลงมาจากระดับการใช้งาน CodeIgniter เซสชันคือWP ประชุมปลั๊กอิน

เมื่อคุณเปิดใช้งานปลั๊กอินคุณสามารถเริ่มใช้$sessionวัตถุจากที่ใดก็ได้ในชุดรูปแบบของคุณ ( $sessionวัตถุตราบเท่าที่ทั่วโลก) ยกตัวอย่างเช่นการใช้วัตถุเซสชั่น $ ลงในheader.phpไฟล์เพียงแค่เพิ่มรหัสนี้:

global $session;

หากคุณเป็นนักพัฒนาปลั๊กอินและต้องการปรับใช้ปลั๊กอินนี้กับของคุณคุณสามารถค้นหารุ่นสแตนด์อโลนในแพ็คเกจได้เช่นกัน เอกสารของปลั๊กอินให้ข้อมูลเพิ่มเติมสำหรับนักพัฒนาปลั๊กอินเกี่ยวกับวิธีปรับให้เข้ากับโครงการของคุณ

นี่คือฟังก์ชั่นที่มีประโยชน์สำหรับทั้งนักพัฒนาธีมและปลั๊กอิน

คุณสามารถเพิ่มข้อมูลเซสชันดังนี้:

// One value
$session->set_userdata( 'username', 'john' );

// Passing array
$array = array(
    'username' => 'john',
    'email'    => 'john@gmail.com'
);

$session->set_userdata( $array );

ในการดึงข้อมูลเซสชัน:

$session->userdata( 'username' );

วิธีรับข้อมูลเซสชันทั้งหมด :

$session->all_userdata(); // returns array

หากต้องการลบหนึ่งรายการออกจากเซสชัน:

$session->unset_userdata( 'username' );

หากต้องการลบรายการเพิ่มเติมจากเซสชัน:

$array = array(
    'username' => '',
    'email'    => ''
);
$session->unset_userdata( $array );

นอกจากนี้คุณยังสามารถใช้Flashdataซึ่งเป็นข้อมูลเซสชั่นที่จะพร้อมใช้งานสำหรับการร้องขอเซิร์ฟเวอร์ครั้งถัดไปเท่านั้น สิ่งเหล่านี้มีประโยชน์มากเมื่อคุณใช้เพื่อเป็นข้อมูลหรือข้อความสถานะ (เช่น“ ผลิตภัณฑ์ถูกลบแล้ว”)

// Add Flashdata
$session->set_flashdata( 'item', 'value' );

// Retrieve Flashdata
$session->flashdata( 'item' );

// Preserving flashdata 
// (if you need to preserve flashdata through an additional request, 
// you can use this function):
$session->keep_flashdata( 'item' );

เพื่อทำลายเซสชั่น:

$session->sess_destroy();

ปลั๊กอินยังสนับสนุนย่อ คุณสามารถพิมพ์ข้อมูลเซสชันใด ๆ ในโพสต์หรือหน้าของคุณ:

[session key="username"]

ในการเข้าถึงคีย์ที่สอง:

[session key="user_data" sec_key="display_name"]

ฉันหวังว่านี่จะช่วยให้ใครบางคน


1
ปลั๊กอิน WP Sessions ไม่มี!
Kiren Siva

1
ใช่คุณจะต้องใช้อันนั้น: wordpress.org/plugins/wp-session-manager (นี่ดีกว่าและมีเสถียรภาพมาก)
beytarovski

อีกปลั๊กอินหนึ่งwordpress.org/plugins/wp-native-php-sessions
nu everest

ทำไมเราไม่สามารถใช้ฟังก์ชั่นเริ่มต้นของ PHP ใน WordPress ได้? โซลูชันนี้สร้างการพึ่งพาบนปลั๊กอิน
Amrit

@Amritpal เพราะเซิร์ฟเวอร์ PHP / Apache ไม่สนับสนุนเซสชันทั้งหมด หากคุณต้องการสร้างซอฟต์แวร์สาธารณะ / ปลั๊กอินเช่น WP คุณต้องคิดเกี่ยวกับมัน หากโครงการส่วนบุคคลที่คุณสามารถแก้ไขเซิร์ฟเวอร์นั่นไม่ใช่ปัญหา
beytarovski

8

WordPress ไม่ได้ใช้เซสชันนั่นเป็นสาเหตุที่ตัวแปรเซสชันของคุณไม่ทำงาน

เป็นเรื่องของความเป็นจริงหากตัวแปรบางอย่างมีการกำหนดWordPress จริงจะทำลาย$_SESSIONเพื่อให้ตัวเองไร้สัญชาติ

แต่ถ้าคุณต้องการใช้เซสชันลองเพิ่มsession_start()ที่จุดเริ่มต้นของwp-config.phpไฟล์ของคุณ (หวังว่า) จะเริ่มเซสชันเมื่อใดก็ตามที่ WP เริ่มต้นขึ้นดังนั้นคุณจะสามารถตั้งค่าและอ่าน$_SESSIONตัวแปรของคุณที่อื่นในระบบ


ฉันเห็นว่า Wordpress ใช้คุกกี้เพื่อเก็บข้อมูลการเข้าสู่ระบบ เมื่อฉันพิมพ์อาร์เรย์ $ _COOKIE ฉันจะเห็นข้อมูลบางอย่าง ฉันต้องการตั้งค่าข้อมูลด้วยตนเอง ข้อมูลเพิ่มเติมที่นี่: stackoverflow.com/questions/21595900/…
shasi kanth

1
นอกจากนี้ขอแนะนำให้แก้ไขไฟล์ wp-config.php เพื่อเริ่มเซสชัน หากเราอัปเดต Wordpress ในภายหลังไฟล์ wp-config.php จะได้รับการอัปเดตด้วยหรือไม่
shasi kanth

แบบฝึกหัดที่กล่าวถึงsilvermapleweb.com/using-the-php-session-in-wordpress
nu everest

1
@shasikanth ไม่wp-cofnig.phpไม่ได้สัมผัสกับการปรับปรุง
T.Todua

1
@shasikanth wp-config.phpจะไม่ได้รับการอัปเดตมิฉะนั้นคุณอาจสูญเสียการเชื่อมต่อฐานข้อมูลและพารามิเตอร์อื่น ๆ ที่คุณตั้งค่าด้วยตนเอง
Erenor Paz

-5

Wordpress ไม่สนับสนุนมัน

คุณต้องเพิ่มบรรทัดต่อไปนี้ที่ด้านบนของfunctions.php

if ( ! session_id() ) {
    session_start();
}

10
ทำไมคุณถึงเริ่มเซสชั่นสองครั้ง?
ไกเซอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.