2009-09-17 57 views
21

Tôi đang tạo một trang web bằng cách sử dụng Wordpress và tôi muốn xem lại các phiên của nó. Nhưng tôi không tìm thấy bất kỳ plugin nào, hoặc thậm chí là tài liệu. Bất kỳ đề xuất hoặc tài liệu tham khảo trước khi tôi bắt đầu hack nó?Quản lý phiên Wordpress

Lưu ý: Tôi hỏi về việc liệu WP có sử dụng các phiên PHP chuẩn không, không phải cách thêm các phiên PHP, ví dụ: sử dụng session_start(). Rõ ràng bất kỳ trạng thái nào của WP vẫn được thực hiện bằng các phương tiện khác. Vì vậy, nếu tôi muốn sử dụng các phiên PHP tôi cần phải thêm và duy trì bản thân mình hoàn toàn, bằng cách sử dụng các kỹ thuật giống như những người trong chuỗi.

Cảm ơn tất cả!

+0

Giải pháp tốt hơn tại đây: http://wordpress.stackexchange.com/a/72744/20261 – dino

Trả lời

15

Bạn đã thấy điều này? http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session

WordPress không xuất hiện để gọi session_start() vì nó muốn được quốc tịch và nếu register_globals được định nghĩa, nó sẽ tự động phá hủy của bạn $_SESSION

+0

Cảm ơn - từ đó tôi đã học được rằng bạn có thể gọi session_start() trong wp_config, nó sẽ không bị ghi đè bởi các bản cập nhật. Nhưng tốt hơn thế, tôi đang sử dụng wp_config để khởi tạo một cá thể đơn lẻ của một lớp "Ngữ cảnh" mà tôi đang sử dụng để giữ một loạt các thứ tôi đang thêm (bao gồm cả bảng auth người dùng mở rộng, v.v.) và có thể gọi session_start(). Tài liệu tham khảo của bạn đã làm rõ nó cho tôi. (Bây giờ tôi cần phải duy trì wp_settings với miếng vá của mình để giữ lại $ _SESSION, hoặc người nào khác sử dụng mảng "$ input" hợp nhất. Hoặc để "Context" duy trì và cập nhật các biến session.) Tôi ghét nó khi họ làm điều đó. – dkretz

+1

Liên kết đã chết, nhưng nó nằm trong máy rút tiền https://web.archive.org/web/20161021035452/http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session – Kaktus

2

Wordpress dường như không sử dụng bất kỳ phiên nào.

Cách tốt nhất để sử dụng nó là sử dụng móc hành động mà nó cung cấp.

+1

Bạn hoàn toàn không chính xác, Anraiki. ** Wordpress chắc chắn không sử dụng Phiên **. Và .. ngoài ra, nếu bạn muốn sử dụng giá trị phiên tùy chỉnh của riêng mình, hãy làm theo cách sau: Bạn cần thêm các dòng sau ở đầu 'wp-config.php' if (! Session_id()) { session_start(); } Sau đó thêm dòng sau vào đầu 'header.php' session_start(); – Alvin

+3

WordPress sử dụng cookie chứ không phải phiên –

5

Đối với những gì tôi cần phải làm gì, câu trả lời tốt nhất bao gồm:

  1. Để cho phép cookie cho wordpress để duy trì qua các tên miền phụ, cài đặt Root Cookie plugin.
  2. sub1.domain.com có wordpress; sub2.domain.com là một trang web khác. Từ các trang web khác (sub2), tôi đọc các cookie để xác định ai là người sử dụng là gì và nếu người dùng đang đăng nhập

cookie của tôi là như sau:.

[wordpress_909bb230b32f5f0473202684d863b2e0] => mshaffer|1255298821|d0249fced9c323835c5bf7e84ad3ffea 
[wordpress_logged_in_909bb230b32f5f0473202684d863b2e0] => mshaffer|1255298821|56e9c19541ecb596a1fa0995da935700 

Sử dụng PHP, Tôi có thể lặp qua các cookie, phân tích cú pháp các cặp key=>value. Những cookie này cho tôi biết rằng [mshaffer] có cookie được lưu trữ trên wordpress và cũng được xác thực là logged_in. Hết hạn của cookie là 1255298821.

Trong sub2, tôi có thể truy vấn cơ sở dữ liệu của wordpress và lấy thông tin người dùng:

SELECT * FROM `wp_users` WHERE user_login = 'mshaffer' ... lấy user_id, user_email từ truy vấn này

SELECT * FROM `wp_usermeta` WHERE user_id = '$user_id' ... nhiều lấy các dữ liệu khác từ wp

Với thông tin này, tôi có thể thêm vào số sub2 biến phiên/cookie của mình và làm tôi muốn với dữ liệu. Tôi có thể xác định liệu tôi có đăng nhập hay không, và tên người dùng của tôi ... để tôi lấy nhiều dữ liệu khác nhau. Bây giờ tôi có thể sử dụng xác thực WordPress trong sub2.domain.com và chuyển hướng tương ứng.

monte

{x:

+0

Hãy nhớ rằng bạn không thể dựa vào cookie là chính hãng. Tôi có thể gửi trang web của bạn một cookie với bất kỳ tên người dùng nào tôi muốn. Chuỗi dài hex là (tôi nghĩ) một kiểm tra mật mã mà bạn cần phân tích để đảm bảo cookie được thiết lập bởi WordPress. – Tamlyn

+0

Chắc chắn Tamlyn bạn có thể chuyển thêm muối/hạt tiêu vào cookie và kiểm tra bổ sung khi so sánh. – mshaffer

16

Đó là một ý tưởng rất xấu để sửa đổi WP lõi file cho khả năng sử dụng phiên. Cách tốt nhất tôi tìm thấy là gọi session_start() từ móc hoạt động init.

function kana_init_session() { 
    session_start(); 
} 

add_action('init', 'kana_init_session', 1); 

Bạn có thể đặt nó trong functions.php tệp của chủ đề của bạn.

bài viết chi tiết có thể được tìm thấy ở đây: http://www.kanasolution.com/2011/01/session-variable-in-wordpress/

5

Xem xét sử dụng WordPress Transient API

giá trị được lưu trữ bằng cách sử dụng API thoáng được nhìn thấy tất cả người dùng, không chỉ người dùng hiện thời, tùy thuộc vào định danh duy nhất sử dụng để lấy các thoáng qua, bạn có thể chỉ định cho mỗi người dùng một số nhận dạng duy nhất về cơ bản khiến cho tạm thời hoạt động rất giống phiên.

cân nhắc thêm:

  • Tùy thuộc vào một thiết lập cho người dùng với bộ nhớ cache đối tượng, vv transients thể phải lúc nào cũng được lưu trữ trong DB (ví dụ memcached), sử dụng quá độ cho phiên có thể có nghĩa rằng dữ liệu có thể bị cồng kềnh và lấp đầy bộ nhớ một cách nhanh chóng (trong việc sử dụng memcached).

  • Ngoài ra, có vẻ như WP không làm bộ sưu tập ô tô rác cho transients: https://wordpress.stackexchange.com/questions/6602/are-transients-garbage-collected

1

Đặt mã này trong wp-config.php tại dòng đầu tiên:

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

Đặt mã này vào header.php của chủ đề tại dòng đầu tiên:

session_start(); 

Sau đó, nó sẽ duy trì tất cả các biến phiên.

1

Nếu bạn muốn sử dụng các giá trị phiên của riêng mình, Wordpress hỗ trợ nó.

Bạn cần phải thêm dòng sau vào phía trên cùng của wp-config.php

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

Sau đó thêm sau dòng ở đầu header.php

session_start(); 
1

Gắn chức năng với session_start() trên wp_loaded dường như hoạt động trong trường hợp này.

Các vấn đề liên quan