Oturum Nasıl Ayarlanır? CodeÖrnekli Ateşleyici

⚡ Akıllı Özet

CodeIgniter Oturum Yönetimi, kullanıcı verilerini durumsuz HTTP istekleri arasında saklayarak bir uygulamanın oturum açmış bir kullanıcıyı, sepet öğelerini veya tek seferlik flaş mesajları hatırlamasını sağlar. Bu örnek, flaş mesajlaşma ve simüle edilmiş bir oturum açma işlemini Igniter kullanarak oluşturur. CodeIgniter oturum kütüphanesi.

  • 🌐 Neden Seanslar: HTTP durumsuz bir protokoldür, bu nedenle oturumlar sunucudaki ayrı sayfa istekleri arasında oturum açma durumu gibi kullanıcı verilerini korur.
  • 🍪 Çerezler ve Oturumlar: Çerezler kullanıcının bilgisayarında küçük veriler depolarken, oturumlar sunucuda daha büyük veriler depolar ve hassas değerler için daha güvenlidir.
  • ???? Flash Verileri: set_flashdata() işlevi, yalnızca bir sonraki istekte kullanılabilen bir mesajı saklar; bu, yönlendirme sonrasında tek seferlik geri bildirim için idealdir.
  • 🔑 Kullanıcı bilgisi: set_userdata() işlevi, kullanıcı adı ve oturum açmış olma durumu gibi değerleri tüm oturum boyunca saklar ve unset_userdata() işlevi ise oturum kapatıldığında bunları siler.
  • 🛡️ Giriş kontrolu: Yeniden kullanılabilir bir `check_auth()` metodu, `logged_in` oturum anahtarı eksik olduğunda ziyaretçileri giriş sayfasına yönlendirir.
  • 🧪 Çalışma Örneği: Bu eğitimde, flash ve kalıcı oturum akışlarını göstermek için kablo yolları, bir denetleyici ve Bulma tarzı görünümler kullanılmıştır.
  • 🤖 Yapay Zeka Yardımı: Yapay zeka araçları, oturum denetleyicilerinin iskeletini oluşturabilir, rota haritaları üretebilir ve dağıtımdan önce güvensiz oturum işlemlerini işaretleyebilir.

CodeIgniter Oturum Yönetimi

CodeIgniter Oturum Yönetimi

Daha önce masaüstü uygulamaları geliştirdiyseniz, global bir değişken tanımlayabileceğinizi, ona bir değer atayabileceğinizi ve uygulamanın yaşam döngüsü boyunca kullanabileceğinizi muhtemelen biliyorsunuzdur. Birden fazla formu açıp kapatırken, her istek global değişkene erişebilecektir.

Başka bir deyişle, uygulamanın durumu korunur. Yani, giriş yaptığınızda şirket adını global bir değişkene atadıysanız, giriş formunu kapattıktan sonra bile şirket adının bu durumu korunur.

HTTP, az önce anlattığımız senaryodan biraz farklı çalışır. Durumsuzdur. Yani, bir istekte yaptığınız işlemler bir sonraki istekte kalıcı olmaz.

Bu sorunu aşmak için PHP'de iki (2) çözümümüz var. Ya kullanıcının bilgisayarına yerleştirilen küçük dosyalar olan çerezlerle çalışabiliriz ya da çerezlere benzer ancak sunucuda depolanan ve çerezlerden daha büyük kapasiteye sahip olan oturumlarla çalışabiliriz.

Oturumlar ne zaman kullanılmalı?

Oturumlar genellikle kullanıcının sayfadan sayfaya yaptığı etkinlikleri takip etmek istediğinizde kullanışlıdır. Örneğin, web sitenizde korumalı bir alanınız olduğunu varsayalım. Kullanıcıların her sayfada tekrar giriş yapmasına gerek yoktur. Kullanıcının bir kez giriş yapmasına izin verip bilgilerini bir oturum değişkeninde saklayabilir ve daha sonraki isteklerde aynı verileri tekrar kullanabilirsiniz. Diğer kullanım alanları arasında bir mağaza üzerinde çalışırken görülen durumlar yer alır.ping Sistemde kullanıcının mağazaya ürün eklemesi gerekiyor.ping araba.

Seçenek olarak ise, CodeIgniter ayrıca, verilerin bir sonraki istekte yalnızca bir kez kullanılabilir olmasını sağlamak için oturumları kullanır. Bu, bir veritabanı kaydını düzenleyip güncellediğinizde ve kullanıcı başka bir sayfaya yönlendirildiğinde ona geri bildirim vermek istediğinizde faydalıdır.

CI Oturumlarıyla diğer sayfalara Flash Mesajlar Gönderme

Bu bölümde oturum kitaplığını kullanarak diğer sayfalara hızlı mesaj göndermeyi öğreneceksiniz. Codeateşleyici.

SessionController'da yeni bir dosya oluşturun

application/controllers/SessionController.php

Aşağıdaki kodu ekleyin

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class SessionController extends CI_Controller {

public function __construct() {
parent:: __construct();

$this->load->helper('url');
$this->load->library('session');
}

public function index() {

$this->load->view('sessions/index');
}

public function flash_message(){
$this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages');
redirect(base_url('flash_index'));
}
}

İŞTE,

  • Class SessionController, CI_Controller'ı genişletir {…}, SessionController sınıfını tanımlar ve ana denetleyici sınıfını genişletir.
  • public function __construct() {…} üst sınıfı başlatan yapıcı yöntemini tanımlar ve url yardımcısını ve oturum kitaplığını yükler.
  • public function index() {…}, oturum indeksi görünümünü yükleyen oturum indeksi yöntemini tanımlar.
  • genel işlev flash_message(){…}, flash verilerini ayarlayan ve ardından flash_index yoluna yönlendiren flash mesaj yöntemini tanımlar

Şimdi oturum verilerinin değerini görüntüleyecek olan görünümü oluşturalım.

application/views klasöründe sessions adında yeni bir dizin oluşturun.

application/views/sessions'da yeni bir index.php dosyası oluşturun

Aşağıdaki kodu ekleyin

<html>
<head>
<title>Code Igniter Flash Session</title>
</head>
<body>
<p>The session value of msg is <b> <?= $this->session->userdata('msg');?> </b></p>
</body>
</html>

İŞTE,

`session->userdata('msg');?>` ifadesi, `msg` anahtarına sahip oturum verilerinin değerini alır ve tarayıcıda görüntüler.

Şimdi oturum flaşlama yöntemimiz için rotaları oluşturalım.

application/config/routes.php dosyasını açın

Aşağıdaki satırları ekleyin

$route['flash_index'] = 'sessioncontroller';
$route['flash_message'] = 'sessioncontroller/flash_message';

Şimdi yerleşik sunucuyu başlatalım. PHP ve flaş mesajlarımızı test edin

Terminali aç

Aşağıdaki komutu çalıştırın

cd C:\Sites\ci-app
php -S localhost:3000

İŞTE,

Yukarıdaki komut uygulama kodu dizinine göz atar ve yerleşik sunucuyu 3000 numaralı bağlantı noktasında başlatır.

Not: Uygulama yolunun, uygulamayı indirdiğiniz yol ile aynı olması gerekir. CodeIgniter programını kullanabilirsiniz ve bilgisayarınızda boş olan herhangi bir port numarasını kullanabilirsiniz. 3000 numaralı portu kullanmanız gerekmez.

Aşağıdakileri yükleyin URL Web tarayıcınızda: http://localhost:3000/flash_message

Aşağıdaki sayfaya yönlendirileceksiniz. URLve aşağıdaki sonuçları alacaksınız: http://localhost:3000/flash_index

Diğer sayfalara Flash Mesaj Gönderme

Web tarayıcınızın yenile düğmesine tıklayın veya F5 tuşuna basın

Şimdi aşağıdaki sonuçları alacaksınız

Diğer sayfalara Flash Mesaj Gönderme

Kullanıcı Verilerini CI Oturumlarında Depolama

Şimdi biraz daha gelişmiş bir örneğe bakalım. Basitleştirmek için, kullanıcı kimlik doğrulamasını simüle edeceğiz ve veritabanındaki kullanıcı kaydını ve gönderilen şifreyi doğrulama işleminin gerçek uygulamasını yapmayacağız.

Güzergahlarla başlayalım.

application/config dosyasında bulunan Routes.php dosyasını açın

Aşağıdaki rotaları ekleyin

$route['login'] = 'sessioncontroller/login';
$route['authenticate'] = 'sessioncontroller/authenticate';
$route['settings'] = 'sessioncontroller/settings';
$route['dashboard'] = 'sessioncontroller/dashboard';
$route['logout'] = 'sessioncontroller/logout';

İŞTE,

  • $route['login'] = 'sessioncontroller/login'; oturum açma formunu görüntüleyen rotayı tanımlar
  • $route['authenticate'] = 'sessioncontroller/authenticate'; Başarılı kullanıcı oturum açma işlemini simüle eden rotayı tanımlar ve oturum oturum açma verilerini ayarlar.
  • $route['settings'] = 'sessioncontroller/settings'; yalnızca oturum açmış kullanıcıların erişebilmesi gereken korumalı bir sayfayı tanımlar
  • $route['dashboard'] = 'sessioncontroller/dashboard'; Yalnızca oturum açmış kullanıcıların erişebilmesi gereken korumalı bir sayfayı tanımlar.
  • $route['logout'] = 'sessioncontroller/logout'; oturum verilerini yok ederek kullanıcının oturumunu kapatır

Şimdi SessionController'ı güncelleyelim.

Application/controllers/SessionController.php dosyasını açın

Aşağıdaki yöntemleri ekleyin

public function check_auth($page) {
if (!$this->session->userdata('logged_in')) {
$this->session->set_flashdata('msg', "You need to be logged in to access the $page page.");
redirect('login');
}
}

public function login() {
$this->load->view('sessions/login');
}

public function authenticate() {
$this->session->set_userdata('username', 'John Doe');
$this->session->set_userdata('logged_in', TRUE);
redirect(base_url('dashboard'));
}

public function dashboard() {
$this->check_auth('dashboard');
$this->load->view('sessions/dashboard');
}

public function settings() {
$this->check_auth('settings');
$this->load->view('sessions/settings');
}

public function logout() {
$this->session->unset_userdata('username');
$this->session->unset_userdata('logged_in');
redirect(base_url('login'));
}

İŞTE,

  • public function check_auth($page) {…} yöntemi, kullanıcının giriş yapıp yapmadığını kontrol eder ve ardından sayfaya erişime izin verir. Kullanıcı giriş yapmamışsa, kullanıcıya bir uyarı mesajı ile giriş sayfasına yönlendirme yapılır.
  • public function login() {…} oturumlar dizininde bulunan giriş görünümünü yükler.
  • public function authenticate() {…}, signed_in ve username anahtarları için oturum kullanıcı verilerini ayarlar. NOT: Veritabanına karşı herhangi bir oturum açma ayrıntısını doğrulamıyoruz. Sadece gönderilen ayrıntıların doğru olduğunu varsayıyoruz ve oturum verilerini ayarlıyoruz.
  • public function dashboard() {…} fonksiyonu, `$this->check_auth('dashboard');` çağrısından sonra `logged_in` oturum anahtarının ayarlanmış olduğunu doğrulayarak kontrol paneli sayfasını yükler.
  • public function settings() {…} fonksiyonu, korumalı olan ayarlar sayfasını yükler.
  • public function logout() {…}, oturum verilerini yok eder ve kullanıcının oturumunu kapatır. Yöntem aynı zamanda giriş sayfasına da yönlendirir

CodeIgniter Oturum Görünümleri

application/views/sessions dizininde aşağıdaki görünümleri oluşturun

  • pano.php
  • login.php
  • settings.php

Aşağıdaki kodu dashboard.php'ye ekleyin

<!DOCTYPE html>
<html>
<head>
<title>Dashboard</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https:0
</head>
<body>
<div class="container">
<div class="column">
<nav class="navbar" role="navigation" aria-label="main navigation">
<div id="navbarBasicExample" class="navbar-menu">
<div class="navbar-start">
<a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a>
<a href="<?= site_url('settings')?>" class="navbar-item">Settings</a>
</div>
 
<div class="navbar-end">
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link"><?=$this->session->userdata(3);?></a>
 
<div class="navbar-dropdown">
<a class="navbar-item">My Profile</a>
<hr class="navbar-divider">
<a class="navbar-item">Sign out</a>
</div>
</div>
</div>
</div>
</nav>
<h3>Welcome Page</h3>
</div>
</div>
</body>
</html>

İŞTE,

session->userdata('username');?> kimlik doğrulama yönteminde belirlediğimiz kullanıcı adını görüntüler

Aşağıdaki kodu login.php'ye ekleyin

<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https:0
</head>
<body>
<div class="container">
<div class="column">
<p><?=$this->session->userdata(1);?></p>
<form method="post" action="<?= site_url('authenticate')?>">
<div class="field">
<label class="label">Username</label>
<div class="control">
<input class="input" type="text" placeholder="Text input">
</div>
</div>
<div class="field">
<label class="label">Password</label>
<div class="control">
<input class="input" type="password" placeholder="Text input">
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-success">Login</button>
</div>
</div>
</form>
</div>
</div>
</body>
</html>

İŞTE,

Giriş formu kimlik doğrulama rotasına gönderilir.

Aşağıdaki kodu settings.php'ye ekleyin

<!DOCTYPE html>
<html>
<head>
<title>Settings</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https:0
</head>
<body>
<div class="container">
<div class="column">
<nav class="navbar" role="navigation" aria-label="main navigation">
<div id="navbarBasicExample" class="navbar-menu">
<div class="navbar-start">
<a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a>
<a href="<?= site_url('settings')?>" class="navbar-item">Settings</a>
</div>
 
<div class="navbar-end">
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Jim Jones</a>
 
<div class="navbar-dropdown">
<a href="#" class="navbar-item">My Profile</a>
<hr class="navbar-divider">
<a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a>
</div>
</div>
</div>
</div>
</nav>
<h3>Settings Page</h3>
</div>
</div>
</body>
</html>

Görüşlerimiz bu kadar. Şimdi uygulamamızı test edelim.

Bu derste yerleşik PHP web sunucusunu kullanıyoruz, ancak siz PHP'yi destekleyen herhangi bir web sunucusunu kullanabilirsiniz.

Terminali aç

Aşağıdaki komutu çalıştırın

cd C:\Sites\ci-app
php -S localhost:3000

İŞTE,

Yukarıdaki komut uygulama kodu dizinine göz atar ve yerleşik sunucuyu 3000 numaralı bağlantı noktasında başlatır.

Not: Uygulama yolunun, uygulamayı indirdiğiniz yol ile aynı olması gerekir. CodeIgniter programını kullanabilirsiniz ve bilgisayarınızda boş olan herhangi bir port numarasını kullanabilirsiniz. 3000 numaralı portu kullanmanız gerekmez.

Aşağıdakileri aç URL Web tarayıcınızda: http://localhost:3000/dashboard

Aşağıdaki sayfaya yönlendirileceksiniz.

CodeIgniter Oturum Görünümleri

Giriş düğmesine tıklayın

Aşağıdaki sonuçları göreceksiniz

CodeIgniter Oturum Görünümleri

Giriş yaptıktan sonra artık oturum verilerini görebiliyoruz.

SSS

Kullanıcı verileri, siz onu silene veya oturum sona erene kadar tüm oturum boyunca kalır. Flashdata ise yalnızca bir sonraki isteğe kadar geçerli olan ve ardından otomatik olarak kaldırılan geçici bir değerdir; bu da tek seferlik mesajlar için uygundur.

Tempdata, belirli bir geçerlilik süresine sahip oturum verileridir. mark_as_temp() veya set_tempdata() işlevlerini saniye cinsinden bir ömür süresi belirterek çağırırsınız; bu sürenin sonunda veriler silinir. CodeIgniter, oturum hala aktif olsa bile değeri otomatik olarak kaldırır.

Varsayılan olarak CodeIgniter, oturumları sunucudaki dosyaları kullanarak saklar. Birden fazla sunucu arasında paylaşımlı depolama gerektiğinde, yapılandırma dosyasında sürücüyü veritabanı, Redis veya Memcached olarak değiştirebilirsiniz.

Evet. Yapay zeka, oturum yapılandırmanızdaki zayıf ayarları inceleyebilir, oturum açtıktan sonra oturum kimliğini yeniden oluşturmayı, çerez şifrelemesini etkinleştirmeyi ve oturum ele geçirme risklerini azaltmak için yalnızca HTTPS çerezleri kullanmayı önerebilir.

Evet. Kısaca açıklamak gerekirse, yapay zeka rotaları, oturum denetleyicisini ve korumalı görünümleri üretebilir. Yapay zeka iskeletleri genellikle simüle edilmiş kontroller kullandığından, her zaman gerçek veritabanı doğrulaması ve parola karma algoritması ekleyin.

Bu yazıyı şu şekilde özetleyin: