[Powered by Google Translate] [PHP Sesyen] [Tommy MacWilliam, Universiti Harvard] [Ini adalah CS50.] [CS50.TV] Sesyen dalam PHP boleh digunakan untuk melaksanakan fungsi, seperti login pengguna, dalam aplikasi web anda. Sesi PHP membolehkan anda untuk mengaitkan maklumat dengan seluruh sesi menyemak imbas pengguna bukan sekadar satu halaman. Ini bermakna sebagai pengguna melawat pelbagai halaman PHP yang membentuk laman web anda, apa-apa maklumat dalam sesi akan berterusan. Ini bermakna bahawa data yang disimpan dalam sesi dengan satu halaman kemudian boleh diakses oleh laman lain. Menyimpan maklumat dalam sesi yang mudah, dan kami berbuat demikian melalui tanda dolar, menekankan, SESI modal berubah-ubah. Tanda dolar, menekankan, SESI-seperti tanda dollar, menekankan, GET dan tanda dolar, menekankan, SELEPAS adalah pelbagai bersekutu yang terdiri daripada pasangan nilai utama. Oleh itu, kita boleh menggunakan sintaks seperti tanda dollar, menekankan, SESI, kurungan, quote, foo, quote, kurungan, sama, quote, bar, quote- untuk menyimpan "bar" nilai dalam kunci "Anu." Walau bagaimanapun, sebelum kita boleh menulis atau membaca dari pelbagai sesi, kita perlu memanggil fungsi-khas sesi, menekankan, bermula, () - dan ini akan memulakan sesi. Jadi mari kita lihat satu contoh. Halaman pertama kami, hello.php, menggunakan sesi kepada output beberapa data kepada pengguna. Ingat, kita akan perlu untuk menggunakan session_start sebelum kita boleh mengakses mana-mana data sesi. Sekarang kita menggunakan isset PHP untuk menentukan jika kunci wujud dalam $ _SESSION array bersekutu. Jika utama yang wujud, ini bermakna pengguna telah log masuk, jadi kita akan memaparkan nama pengguna. Jika utama yang tidak ditetapkan, ini bermakna pengguna tidak log masuk lagi, jadi kita akan memaparkan pautan ke login.php. Jadi mari kita lihat login.php. Turun di sini, kami mempunyai bentuk HTML tunggal dengan input tunggal. Bentuk atribut tindakan adalah $ _SERVER ['PHP_SELF'], dan ini bermakna bahawa kita mahu bentuk itu dikemukakan kepada fail semasa, yang, dalam kes ini, adalah login.php. Jadi mari kita kembali ke bahagian atas fail ini. Jika pengguna menghantar borang, kemudian $ _POST ['nama'] mesti ditetapkan. Untuk maklumat lanjut mengenai bentuk HTML dan pos, menyemak PHP video Pembangunan Web. Dalam kes yang pengguna lakukan mengemukakan borang, kita ingin menulis nilai yang mereka ditaip dalam ke dalam sesi. Sekarang kita boleh mengarahkan pengguna untuk hello.php. Kerana kita telah disimpan input pengguna ke dalam sesi, hello.php akan dapat untuk mengakses nilai yang telah ditetapkan dalam login.php. Jadi mari kita lihat ini dalam pelayar web. Pertama, kita akan pergi ke http://localhost/hello.php. Kita boleh lihat di sini bahawa kita tidak log masuk lagi, jadi mari kita klik link login, yang akan mengarahkan kita login.php. Okay, saya akan menaip nama saya, yang kemudiannya akan disimpan dalam sesi. Hebat! Sekarang kita boleh melihat input saya dari login.php pada hello.php melalui sesi. Jadi, bagaimana dengan log pengguna keluar? Nah, untuk log masuk pengguna, kita hanya disimpan nilai ke dalam nama sesi. Jadi untuk log masuk pengguna, kita hanya perlu untuk membuang bahawa kunci nama dari pelbagai sesi. Jadi mari kita lihat fail terakhir ini, logout.php. Sekali lagi, kita perlu untuk memanggil session_start () sebelum kita boleh melakukan apa sahaja yang berkaitan sesi. Sekarang kita hanya boleh memanggil session_destroy (), yang akan menjaga menghapuskan semua data dalam sesi dan kemudian mengarahkan pengguna kembali ke hello.php. Jadi jika saya klik pada pautan Log keluar, kita dapat melihat bahawa pelayan telah lupa siapa saya, dan saya tidak lagi log masuk Jadi apa yang berlaku di sini di bawah hood? Dalam usaha untuk mendapatkan tingkah laku yang kita hanya melihat, server kita perlu melakukan 2 perkara. Pertama, pelayan perlu entah bagaimana menyimpan data dalam sesi. Fail-fail PHP yang berbeza yang terdiri daripada laman web dilaksanakan sebagai doa berasingan jurubahasa PHP ubah jadi tempatan tidak boleh dikongsi di antara mereka. Sebaliknya, pelayan perlu untuk menyimpan data sesi kami di beberapa tempat yang berganda. fail php boleh akses. Kedua, pelayan perlu mengaitkan data sesi dengan hanya sesi semak imbas saya. Apabila saya masuk ke Facebook, mungkin ada berjuta-juta orang lain juga log masuk ke dalam Facebook pada masa yang sama. Tetapi pelayan memerlukan beberapa cara mengaitkan data saya dengan sesi semasa saya dan data orang lain dengan sesi yang lain. Nasib baik, pengarang PHP berfikir tentang semua ini bagi kami, jadi kami tidak perlu melaksanakan apa-apa ini diri kita sendiri. Tetapi mari kita lihat apa PHP tidak secara lalai. Apabila saya melawat laman yang mengandungi PHP session_start buat kali pertama, PHP akan menjana nilai rawak yang besar. Sehingga session_destroy dipanggil-atau saya tidak melawat mana-mana halaman PHP di laman web yang untuk sementara- bahawa nilai rawak dan mungkin unik akan dikaitkan dengan saya. Dengan cara itu pelayan mempunyai beberapa cara mengenalpasti sesi semak imbas saya berbanding dengan orang lain. Kita boleh lihat ID sesi terkini menggunakan fungsi PHP, session_ID. Di sini kita hanya akan keluarkan nilai pengecam sesi kami. Jadi, jika kita sekali lagi log masuk ke aplikasi web contoh, dan kini pergi ke sessid.php, kita akan melihat ini rentetan panjang aksara, dan itulah pengecam semasa sesi saya, dan bagaimana pelayan mengesan siapa saya. Baiklah, tetapi kami hanya diselesaikan separuh masalah tersebut. Pasti, pelayan itu kini mempunyai beberapa cara mengenal pasti saya, tetapi apabila saya melawat laman yang lain, pelayan perlu untuk menggunakan semula pengecam yang sama bukannya menjana yang baru. Ingat, jika saya mengisytiharkan pembolehubah tempatan dalam foo.php dan kemudian melawat bar.php, bar.php tidak mempunyai cara untuk mengetahui apa yang berlaku di foo.php. Jadi pelaksanaan sesi php lalai memerlukan pelayar mengingatkan pelayan yang sesi ID untuk digunakan. Ini dilaksanakan dalam bentuk cookie. A cookie di samping menjadi snek yang lazat hanya satu fail teks kecil pada komputer anda bahawa pelayan boleh menulis kepada melalui pelayar web. Jadi selepas PHP menjana ID sesi saya unik menerusi session_start, ia akan memberitahu pelayar web untuk menyimpan pengecam yang dalam fail teks tempatan, atau cookie. Kemudian pelayar web termasuk pengecam bahawa dalam setiap permintaan bahawa ia masuk ke pelayan. Jadi benar-benar, pelayan web itu tidak mengingati siapa saya. Sebaliknya, pelayar web adalah hanya mengingati pengecam unik yang telah dijana oleh PHP dan kemudian sentiasa mengingatkan pelayan apa pengecam yang. Dengan cara itu, maklumat seperti nama pengguna saya disimpan pada pelayan tidak pelayar web saya. Penyemak imbas hanya memberitahu pelayan di mana PHP disimpan maklumat yang jadi PHP boleh mengambil ia. Jadi yang menimbulkan soalan, di mana PHP sebenarnya menyimpan maklumat ini? Secara lalai, PHP akan menyimpan data sesi anda dalam fail dalam / tmp, atau 'temp' folder. Nama fail yang akan termasuk ID sesi supaya PHP boleh menentukan yang fail untuk membaca dan menulis dari melalui hanya ID sesi. Baiklah. Jadi mari kita membuka tekan Rangkaian dalam penyahpepijat Chrome melalui ikon sepana di sebelah kanan atas. Sekarang mari kita menuju ke hello.php lagi. Mari kita klik pada permintaan HTTP untuk hello.php dan kemudian klik pada Tajuk. Di sini kita dapat melihat bahawa header cookie mengandungi kunci yang dipanggil PHPSESSID, atau sesi PHP ID-dengan nilai itu adalah bahawa rentetan sama lama kita melihat apabila kita melawat sessid.php. Ini betul-betul bagaimana pelayar tidak mengingatkan pelayan apa ID sesi harus digunakan. Ia termasuk ia dalam header HTTP. Baiklah. Mari kita kembali ke terminal. Mari kita pergi ke / tmp, di mana PHP menyimpan maklumat sesi secara lalai. Apa yang pasti, di dalam folder sementara ini, di sini adalah fail yang mengandungi ID sesi tepat yang sama. Jika kita membuka fail ini, kita dapat melihat bagaimana PHP mewakili sesi saya pada cakera. Berikut rentetan "Tommy" disimpan untuk kekunci 'nama,' yang betul-betul apa yang kita telah menjangkakan. Dan itulah gambaran keseluruhan sesi dalam PHP. Apa yang kita hanya melihat hanya pelaksanaan lalai sesi. Malah, banyak laman web mengubah tingkah laku lalai ini untuk menyimpan sesi PHP dengan lebih cekap bagi kepentingan meningkatkan prestasi. Nama saya Tommy, dan ini adalah CS50. [CS50.TV]