[Powered by Google Translate] [PHP Sessions]
[Tommy MacWilliam, Đại học Harvard]
[Đây là CS50.] [CS50.TV]
Phiên trong PHP có thể được sử dụng để thực hiện chức năng,
như thông tin đăng nhập của người dùng, trong ứng dụng web của bạn.
Phiên PHP cho phép bạn liên kết thông tin
với toàn bộ phiên duyệt web của người sử dụng
chứ không phải chỉ đơn giản là một trang duy nhất.
Vì vậy, điều đó có nghĩa là người dùng truy cập các trang PHP khác nhau tạo nên trang web của bạn,
bất kỳ thông tin trong phiên giao dịch sẽ vẫn tồn tại.
Vì vậy, đó có nghĩa là dữ liệu được lưu trữ trong phiên giao dịch bởi một trang
sau này có thể được truy cập bằng một trang khác.
Lưu trữ thông tin trong một phiên là dễ dàng,
và chúng tôi làm như vậy thông qua các ký hiệu đô la, gạch dưới, biến PHIÊN vốn.
Ký hiệu đô la, gạch dưới, PHIÊN-giống như ký hiệu đô la, gạch dưới, GET
và ký hiệu đô la, gạch dưới, POST-
là một mảng kết hợp bao gồm các cặp giá trị quan trọng.
Vì vậy, chúng ta có thể sử dụng ký hiệu đô la cú pháp như, gạch dưới, PHẦN,
khung, giá, foo, giá, khung, bằng, giá, thanh, báo giá-
để lưu trữ các giá trị "thanh" trong khóa "foo".
Tuy nhiên, trước khi chúng ta có thể viết hoặc đọc từ mảng phiên,
chúng tôi sẽ cần phải gọi một chức năng đặc biệt
phiên, dấu gạch dưới, bắt đầu, () -
và điều này sẽ khởi tạo phiên.
Vì vậy, chúng ta hãy nhìn vào một ví dụ.
Trang đầu tiên của chúng tôi, hello.php, sử dụng phiên để ra một số dữ liệu cho người dùng.
Hãy nhớ rằng, chúng tôi sẽ cần phải sử dụng session_start trước khi chúng tôi có thể truy cập bất kỳ dữ liệu phiên.
Bây giờ chúng ta đang sử dụng isset PHP để xác định xem một khóa tồn tại
trong mảng kết hợp $ _SESSION.
Nếu chính mà tồn tại, có nghĩa là người dùng đã đăng nhập,
vì vậy chúng tôi sẽ hiển thị tên của người dùng.
Trọng đó là nếu không được thiết lập, có nghĩa là người sử dụng đã không đăng nhập nào,
vì vậy chúng tôi sẽ hiển thị một liên kết đến login.php.
Vì vậy, chúng ta hãy nhìn vào login.php.
Ở đây, chúng tôi có một hình thức HTML duy nhất với một đầu vào duy nhất.
Thuộc tính hành động của hình thức là $ _SERVER ['PHP_SELF'],
và điều này chỉ có nghĩa là chúng tôi muốn các hình thức trình tập tin hiện tại,
trong đó, trong trường hợp này, là login.php.
Vì vậy, chúng ta hãy quay trở lại phía trên cùng của tập tin này.
Nếu người dùng gửi các mẫu, sau đó $ _POST ['name'] phải được thiết lập.
Để biết thêm thông tin về các hình thức HTML và sau,
kiểm tra video Phát triển Web PHP.
Trong trường hợp người sử dụng đã gửi biểu mẫu,
chúng tôi muốn ghi các giá trị mà họ gõ vào vào phiên này.
Bây giờ chúng ta có thể chuyển hướng người dùng đến hello.php.
Bởi vì chúng tôi đã được lưu trữ đầu vào của người dùng vào phiên giao dịch,
hello.php sẽ có thể truy cập các giá trị đã được thiết lập trong login.php.
Vì vậy, hãy kiểm tra này trong một trình duyệt web.
Đầu tiên, chúng tôi sẽ hướng đến http://localhost/hello.php.
Chúng ta có thể thấy ở đây mà chúng tôi đã không đăng nhập nào,
vì vậy hãy nhấp vào liên kết đăng nhập, mà sẽ chuyển hướng chúng ta login.php.
Được rồi, tôi sẽ gõ vào tên của tôi, mà sau đó sẽ được lưu trữ trong phiên.
Tuyệt vời! Bây giờ chúng ta có thể nhìn thấy đầu vào của tôi từ login.php trên hello.php qua phiên.
Vì vậy, những gì về cách đăng nhập người sử dụng ra?
Vâng, để đăng nhập vào sử dụng, chúng tôi chỉ đơn giản là lưu trữ một giá trị vào tên phiên.
Vì vậy, để đăng nhập người sử dụng ra, chúng tôi chỉ đơn giản là cần phải loại bỏ chính tên
từ mảng phiên.
Vì vậy, chúng ta hãy nhìn vào tập tin cuối cùng này, logout.php.
Một lần nữa, chúng tôi sẽ cần phải gọi session_start ()
trước khi chúng tôi có thể làm bất cứ điều gì liên quan đến phiên.
Bây giờ chúng ta chỉ có thể gọi session_destroy (),
mà sẽ chăm sóc của việc loại bỏ tất cả các dữ liệu trong phiên giao dịch
và sau đó chuyển hướng người dùng trở lại hello.php.
Vì vậy, nếu tôi bấm vào liên kết Đăng nhập ra,
chúng ta có thể thấy rằng các máy chủ đã quên tôi là ai,
và tôi không còn đăng nhập
Vì vậy, những gì đang xảy ra ở đây bên dưới mui xe?
Để có được hành vi, chúng tôi chỉ nhìn thấy,
máy chủ của chúng tôi cần phải làm 2 việc.
Đầu tiên, các máy chủ cần phải bằng cách nào đó lưu trữ dữ liệu trong phiên.
Các tập tin PHP khác nhau bao gồm một trang web
được thực hiện như lời gọi riêng biệt của thông dịch viên PHP
biến nên địa phương không thể được chia sẻ giữa chúng.
Thay vào đó, các máy chủ cần phải lưu trữ dữ liệu của chúng tôi phiên
ở một số nơi mà nhiều. file php có thể truy cập.
Thứ hai, các máy chủ cần phải kết hợp các dữ liệu phiên với chỉ phiên duyệt web của tôi.
Khi tôi đăng nhập vào Facebook,
có lẽ hàng triệu người khác cũng đăng nhập vào Facebook cùng một lúc.
Nhưng máy chủ cần một số cách kết hợp dữ liệu của tôi
với phiên hiện tại của tôi và dữ liệu của người khác với một phiên.
May mắn thay, các tác giả của PHP nghĩ về tất cả những điều này cho chúng ta,
vì vậy chúng tôi không cần phải thực hiện bất kỳ này chúng ta.
Nhưng chúng ta hãy nhìn vào những gì PHP không theo mặc định.
Khi tôi đến thăm một trang PHP có chứa session_start lần đầu tiên,
PHP sẽ tạo ra một giá trị ngẫu nhiên lớn.
Cho đến khi session_destroy được gọi là hoặc tôi không truy cập vào bất kỳ trang PHP trên trang web đó trong một thời gian-
rằng giá trị ngẫu nhiên và có lẽ điều duy nhất sẽ được liên kết với tôi.
Cách mà các máy chủ có một số cách để xác định phiên duyệt web của tôi
như trái ngược với người khác.
Chúng ta có thể có một cái nhìn tại ID phiên hiện tại
sử dụng chức năng PHP, session_id.
Ở đây chúng tôi chỉ đơn giản là xuất ra giá trị của định danh phiên của chúng tôi.
Vì vậy, nếu chúng ta một lần nữa đăng nhập vào các ứng dụng web ví dụ,
và bây giờ điều hướng đến sessid.php,
chúng ta sẽ thấy chuỗi dài này của nhân vật,
và đó là định danh hiện tại cho phiên của tôi,
và đó là cách các máy chủ đang theo dõi tôi là ai.
Được rồi, nhưng chúng tôi đã chỉ giải quyết một nửa vấn đề.
Chắc chắn, các máy chủ hiện nay có một số cách để xác định tôi,
nhưng khi tôi ghé thăm một trang khác, các máy chủ cần phải tái sử dụng cùng một định danh
chứ không phải là tạo ra một cái mới.
Hãy nhớ rằng, nếu tôi khai báo một biến địa phương trong foo.php
và sau đó truy cập bar.php,
bar.php không có cách nào biết được những gì xảy ra trong foo.php.
Vì vậy, việc thực hiện phiên php mặc định yêu cầu trình duyệt nhắc nhở các máy chủ
mà phiên ID để sử dụng.
Này được thực hiện dưới hình thức của một cookie.
Một cookie ngoài việc có một bữa ăn nhẹ-ngon
chỉ đơn giản là một tập tin văn bản nhỏ trên máy tính của bạn
rằng một máy chủ có thể ghi vào thông qua trình duyệt web.
Vì vậy, sau khi PHP tạo ID phiên duy nhất của tôi qua session_start,
nó sẽ cho trình duyệt web để lưu trữ định rằng trong một tập tin văn bản địa phương, hoặc một cookie.
Sau đó, trình duyệt web sẽ bao gồm định danh trong mọi yêu cầu
mà nó làm cho máy chủ.
Vì vậy, thực sự, máy chủ web không nhớ tôi là ai.
Thay vào đó, trình duyệt web chỉ đơn giản là ghi nhớ các định danh duy nhất
đã được tạo ra bởi PHP và sau đó liên tục nhắc nhở các máy chủ
những gì nhận dạng đó là.
Bằng cách đó, các thông tin như tên người dùng của tôi được lưu trữ trên máy chủ không trình duyệt web của tôi.
Trình duyệt đơn giản cho máy chủ nơi PHP lưu trữ thông tin
PHP để có thể lấy nó.
Để đặt ra câu hỏi, mà là PHP thực sự lưu trữ thông tin này?
Theo mặc định, PHP sẽ lưu trữ dữ liệu phiên của bạn
trong một tập tin bên trong / tmp, hoặc 'tạm thời' thư mục.
Tên của tập tin đó sẽ bao gồm các ID phiên để PHP có thể xác định
mà tập tin để đọc và viết từ qua chỉ session ID.
Được rồi. Vì vậy, hãy mở tab Network trong trình gỡ lỗi của Chrome
thông qua biểu tượng cờ lê ở góc trên bên phải.
Bây giờ chúng ta hãy đi đến hello.php một lần nữa.
Hãy click vào yêu cầu HTTP đến hello.php
và sau đó nhấn vào tiêu đề.
Ở đây chúng ta có thể thấy rằng tiêu đề Cookie chứa một khóa gọi là PHPSESSID,
hoặc PHP session ID-với giá trị đó là chuỗi dài cùng chúng ta đã thấy
khi chúng tôi đến thăm sessid.php.
Đây chính là cách trình duyệt được nhắc nhở máy chủ những gì phiên ID nên được sử dụng.
Nó bao gồm nó trong một tiêu đề HTTP.
Được rồi. Chúng ta hãy quay trở lại nhà ga.
Chúng ta hãy điều hướng đến / tmp, nơi PHP là lưu trữ các thông tin về phiên theo mặc định.
Chắc chắn, bên trong thư mục tạm thời này,
đây là một tập tin có chứa cùng một session ID chính xác.
Nếu chúng ta mở tập tin này, chúng ta có thể xem như thế nào PHP là đại diện cho phiên của tôi trên đĩa.
Đây là chuỗi "Tommy" đang được lưu trữ cho phím 'tên'
đó là chính xác những gì chúng tôi mong đợi.
Và đó là một tổng quan về các phiên trong PHP.
Những gì chúng ta nhìn thấy là chỉ việc thực hiện mặc định của phiên.
Trong thực tế, nhiều trang web thay đổi hành vi mặc định
để lưu trữ các phiên PHP hiệu quả hơn
vì lợi ích của việc cải thiện hiệu suất.
Tên tôi là Tommy, và đây là CS50.
[CS50.TV]