Saya memiliki file PHP yang kadang-kadang dipanggil dari halaman yang memulai sesi dan terkadang dari halaman yang tidak memulai sesi. Karenanya ketika saya menggunakan session_start()
skrip ini saya terkadang mendapatkan pesan kesalahan untuk "sesi sudah dimulai". Untuk itu saya berikan baris berikut:
if(!isset($_COOKIE["PHPSESSID"]))
{
session_start();
}
tapi kali ini saya mendapat pesan peringatan ini:
Pemberitahuan: Variabel tidak terdefinisi: _SESSION
Apakah ada cara yang lebih baik untuk memeriksa apakah sesi sudah dimulai?
Jika saya menggunakan @session_start
akankah hal itu berfungsi dengan baik dan hanya menutup peringatan?
php
session
session-variables
Logan
sumber
sumber
Jawaban:
Cara yang disarankan untuk versi PHP> = 5.4.0, PHP 7
Referensi: http://www.php.net/manual/en/function.session-status.php
Untuk versi PHP <5.4.0
sumber
session_start();session_write_close();
: maka kondisi jika gagal tetapi kami tidak memiliki sesi terbuka ...session_start()
di bagian atas skrip TUTUP ketika skrip keluar, ATAU kapansession_write_closed()
dipanggil sebelum skrip keluar. Yaitu sesi TUTUP ketika datanya ditulis ke cookie sesi dan sesi tidak dikunci untuk diakses oleh skrip lain yang juga menyebut 'session_start'. PENUTUP TIDAK berarti bahwa sesi ini DIHANCURKAN. Anda dapat menutup sesi dengan keluar dari skrip atau panggilan saat inisession_write_close()
, dan Anda dapat membukanya lagi dengan meneleponsession_start()
. Pemahaman saya, setidaknya.Untuk versi PHP sebelum PHP 5.4.0:
Meskipun, IMHO, Anda harus benar-benar berpikir tentang refactoring kode manajemen sesi Anda jika Anda tidak tahu apakah sesi dimulai atau tidak ...
Yang mengatakan, pendapat saya subjektif, dan ada beberapa situasi (contoh yang dijelaskan dalam komentar di bawah) di mana mungkin tidak mungkin untuk mengetahui apakah sesi dimulai.
sumber
PHP 5.4 memperkenalkan session_status () , yang lebih dapat diandalkan daripada mengandalkan
session_id()
.Pertimbangkan cuplikan berikut:
Jadi, untuk memeriksa apakah sesi dimulai, cara yang disarankan dalam PHP 5.4 adalah sekarang:
sumber
Anda dapat melakukan ini, dan itu sangat mudah.
Semoga bermanfaat :)
sumber
$_SESSION=array();
, jadi jawaban ini sepertinya oke.session_destroy()
sudah dipanggil maka$_SESSION
masih bisa diatur. Selain itu, dalam pengujian unit, Anda dapat mengatur$_SESSION
secara langsung. Tapi saya membenarkan ini, karena untuk sebagian besar situasi praktis jawaban ini harus cukup baik (sampai PHP 5.3 tidak pernah terlihat lagi ...)sumber
Sebelum PHP 5.4 tidak ada cara yang dapat diandalkan untuk mengetahui selain menetapkan bendera global.
Mempertimbangkan:
Atau:
Jadi, sebelum PHP 5.4 Anda harus menetapkan boolean global.
sumber
Untuk semua versi php
sumber
if ((defined('PHP_SESSION_ACTIVE') && session_status() !== PHP_SESSION_ACTIVE) || !session_id())
Periksa ini :
Sumber http://php.net
sumber
Gunakan session_id () , ia mengembalikan string kosong jika tidak disetel. Ini lebih dapat diandalkan daripada memeriksa
$_COOKIE
.sumber
semoga membantu!
sumber
Ini harus bekerja untuk semua versi PHP. Ini menentukan versi PHP, kemudian memeriksa untuk melihat apakah sesi dimulai berdasarkan versi PHP. Kemudian jika sesi tidak dimulai itu memulainya.
sumber
Satu-satunya hal yang perlu Anda lakukan adalah:
sumber
Tidak yakin tentang efisiensi solusi semacam itu, tetapi ini dari proyek kerja. Ini juga digunakan jika Anda perlu mendefinisikan bahasa default
sumber
@
sebelum panggilan fungsi menekan kesalahan yang mungkin dilaporkan selama panggilan fungsi.Menambahkan
@
sebelumsession_start
memberitahu PHP untuk menghindari pencetakan pesan kesalahan.Sebagai contoh:
Menggunakan
session_start()
setelah Anda telah mencetak sesuatu ke browser menghasilkan kesalahan sehingga PHP akan menampilkan sesuatu seperti "header tidak dapat dikirim: dimulai pada (baris 12)",@session_start()
masih akan gagal dalam hal ini, tetapi pesan kesalahan tidak dicetak pada layar.Sebelum memasukkan file atau mengalihkan ke halaman baru gunakan
exit()
fungsi, jika tidak maka akan memberikan kesalahan.Kode ini dapat digunakan dalam semua kasus:
sumber
Pada PHP 5.3 ini bekerja untuk saya:
maka kamu punya. Jika Anda tidak menempatkan pernyataan tidak pada jika memulai sesi akan mulai dengan cara apa pun saya tidak mengapa.
sumber
Respons BERDASAR pada Respons @Meliza Ramos (lihat respons pertama) dan http://php.net/manual/en/function.phpversion.php ,
AKSI:
hanya menggunakan openSession ()
sumber
Sebenarnya, sekarang sudah terlambat untuk menjelaskannya di sini karena sudah diselesaikan. Ini adalah file .inc dari salah satu proyek saya di mana Anda mengkonfigurasi menu untuk restoran dengan memilih hidangan dan menghapus / menambah atau mengubah urutan. Server tempat saya bekerja tidak memiliki versi yang sebenarnya jadi saya membuatnya lebih fleksibel. Terserah penulis ingin menggunakan dan mencobanya.
sumber
Apakah potongan kode ini cocok untuk Anda?
sumber
Anda harus mengatur ulang kode Anda sehingga Anda menelepon
session_start()
tepat sekali setiap eksekusi halaman.sumber
sumber
PHP_VERSION_ID tersedia mulai PHP 5.2.7, jadi periksalah ini terlebih dahulu dan jika perlu, buatlah.
session_status
tersedia pada PHP 5.4, jadi kami harus memeriksa ini juga:sumber
Berdasarkan praktik saya, sebelum mengakses
$_SESSION[]
Anda perlu meneleponsession_start
setiap kali untuk menggunakan skrip. Lihat tautan di bawah ini untuk manual.http://php.net/manual/en/function.session-start.php
Bagi saya setidaknya
session_start
membingungkan sebagai nama. Asession_load
bisa lebih jelas.sumber
Saya berakhir dengan periksa status. php 5.4+
sumber
Anda dapat menggunakan solusi berikut untuk memeriksa apakah sesi PHP sudah dimulai:
sumber
Ini yang saya gunakan untuk menentukan apakah sesi sudah dimulai. Dengan menggunakan kosong dan keluarkan sebagai berikut:
sumber
Ganti
session_start();
dengan:sumber