2010-10-25 37 views
15

Điều này thực sự là gì?PHP session_start()

Chương trình có bắt đầu phiên hiện tại dựa trên cookie không? Hiểu điều đó từ trang web PHP. PHP kiểm soát phiên làm việc như thế nào? Nếu tôi bắt đầu một phiên khi người dùng mở trang đăng nhập của tôi, tôi thậm chí còn sử dụng phiên đó để làm gì? Tôi có thể sử dụng phiên hiện tại để nhận thông tin về người dùng đã đăng nhập không?

Trả lời

17

Hệ thống phiên PHP cho phép bạn lưu trữ một cách an toàn dữ liệu trong mảng toàn cầu $_SESSION. Một ví dụ điển hình là để lưu trữ định danh của người dùng trong phiên giao dịch khi họ nhập vào mật khẩu của họ:

if ($user = try_login($login, $password)) 
    $_SESSION['user'] = $user; 

Sau đó, bạn có thể truy cập thông tin trên tất cả các trang khác:

if (isset($_SESSION['user'])) 
    // logged in ! 
    echo user_name($_SESSION['user']); 

Dữ liệu được lưu trữ trên máy chủ, do đó, không có nguy cơ giả mạo (mặt khác, hãy nhớ sử dụng đĩa của bạn).

Bắt đầu phiên cho phép yêu cầu hiện tại sử dụng $_SESSION. Nếu đây là lượt truy cập đầu tiên của người dùng, mảng sẽ trống và cookie phiên mới sẽ được gửi cho bạn.

Đóng phiên chỉ đơn thuần ngăn yêu cầu hiện tại sử dụng $_SESSION, nhưng dữ liệu vẫn ở xung quanh cho các yêu cầu tiếp theo.

Phá hủy phiên sẽ loại bỏ tất cả dữ liệu, mãi mãi. Các phiên bị hủy một thời gian nhất định sau lần truy cập cuối cùng (thường là khoảng 30 phút).

+0

Oooh được rồi. Vì vậy, nó là một mảng toàn cầu trống mà bạn có thể sử dụng để lưu trữ giá trị người dùng (hoặc các giá trị khác), để duy trì trải nghiệm độc đáo của họ trong trang web. – Scott

2

session_start PHP bắt đầu HOẶC sơ yếu lý lịch một phiên HTTP, được giải thích khá tốt trong bài viết này:

http://en.wikipedia.org/wiki/Session_(computer_science)

Khái niệm về một "phiên" HTTP là không cụ thể cho PHP, nó được sử dụng trong nhiều (tất cả?) các khung công tác HTTP phía máy chủ là một cách để cho phép một số trạng thái được lưu trữ/liên kết trên các yêu cầu/phản hồi khác nhau (vì HTTP là không trạng thái). Mã thông báo duy nhất (thường là, nhưng không phải lúc nào cũng được lưu trữ trong cookie) xác định một ứng dụng khách cụ thể và máy chủ có thể kết hợp "phiên".

Dưới đây là một số thông tin thêm về phiên và PHP đặc biệt có thể giúp: http://www.php.net/manual/en/book.session.php

2

Giống như nó nói trong tay

session_start() tạo ra một phiên hoặc sơ yếu lý lịch của một hiện tại dựa trên một định danh phiên qua thông qua yêu cầu GET hoặc POST hoặc được chuyển qua cookie.

Nếu bạn bắt đầu phiên mới tại trang đăng nhập, phiên ban đầu sẽ trống. Bạn có thể lưu trữ trong nó bất cứ điều gì bạn muốn, ví dụ, lưu trữ id người dùng khi người dùng đã đăng nhập. Dữ liệu phiên bị hủy khi bạn đóng phiên.

Bạn có thể muốn đọc tất cả các chương trong Session Extension Manual Pages và cũng thấy

9

Tôi giả sử bạn muốn biết phiên PHP có ý nghĩa gì đối với bạn, lập trình viên.

Khi bạn làm session_start() bạn đang nói với PHP rằng bạn muốn sử dụng phiên. Điều này được cung cấp cho bạn dưới dạng một mảng gọi là $ _SESSION. Bạn có thể sử dụng nó giống như bất kỳ mảng nào khác với sự khác biệt mà những thứ bạn đặt trong đó vẫn ở đó từ trang này sang trang khác (miễn là bạn sử dụng session_start() ở đầu mỗi trang).

Cơ chế thực tế có thể thay đổi tùy theo cấu hình (php.ini), nhưng cài đặt điển hình có thể sử dụng cookie cho phiên. Giả sử rằng máy chủ web của bạn là trên Linux và bạn đang sử dụng cookie. Bạn làm như sau

session_start(); 
$_SESSION['name']='Bob'; 

Khi PHP thấy này nó tạo ra một tập tin văn bản với một tên bán ngẫu nhiên (ví dụ sess_a3tfkd5558kf5rlm44i538fj07), dính các nội dung $ _SESSION trong đó là văn bản đơn giản và sau đó gửi một cookie cho người dùng với id phiên, có thể được sử dụng để tìm tệp phiên (ví dụ: a3tfkd5558kf5rlm44i538fj07).

Lần sau khi người dùng quay lại, anh ta đưa tay vào id phiên trong cookie của mình, PHP chuyển đến tệp có liên quan và tải nội dung của nó trong $ _SESSION.

Bạn sẽ lưu ý rằng thông tin thực tế được lưu trên máy chủ trong khi người dùng chỉ được cung cấp id. Kinda thích giao trong áo của bạn trong một câu lạc bộ và nhận được một vé với một số trên đó.

+0

vì vậy nếu tôi bắt đầu phiên trên mỗi trang, làm thế nào để PHP biết để duy trì cùng một thông tin từ biến $ SESSION từ trang cuối cùng, cookie đó? – Scott

+1

@Scott - Nếu người dùng có cookie có id phiên khớp với phiên hiện tại (tệp phiên hiện có), session_start() sẽ tiếp tục phiên. Nếu không, nó sẽ bắt đầu một cái mới. –

0

Bạn có thể so sánh phiên PHP với cookie, nhưng phiên là cách lưu trữ thông tin an toàn hơn nhiều. Lưu trữ dữ liệu cookie trên máy tính của người dùng, nhưng lưu trữ phiên trên máy chủ trong một tệp tạm thời một cách an toàn. Tôi đã thảo luận phiên họp và làm thế nào để sử dụng nó trên một trong những bài viết trên blog của tôi - How to start a PHP session, store and accessing Session data?

Dưới đây là một mã số ví dụ về lưu trữ dữ liệu trong PHP phiên:

<?php 
session_start(); 
$_SESSION["name"] = "John"; 
?> 

Dưới đây là ví dụ về khi truy xuất dữ liệu phiên :

<?php 
session_start(); 
echo $_SESSION["name"]; 
?> 

Mã trên sẽ hiển thị tên "John".

Nguồn: How to start a PHP session, store and accessing Session data?

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