Als ontwikkelaar van CodeIgniter is het erg belangrijk voor u om te begrijpen hoe u met de kern sessiebibliotheek kunt werken. Natuurlijk kunt u altijd de standaard gebruiken $ _SESSION
syntaxis, maar het wordt altijd aangeraden om de wrapper te gebruiken.
Beginnend met het laden van een sessiebibliotheek, gaan we verder met de bespreking van het toevoegen, ophalen, verwijderen en vernietigen van sessievariabelen. In het laatste segment bekijken we de verschillende ingebouwde sessiestuurprogramma's die door het CodeIgniter-framework zelf worden geboden.
Als u met sessies in CodeIgniter wilt werken, is het eerste dat u nodig hebt een ingebouwde sessiebibliotheek. Tenzij en totdat u een webtoepassing ontwikkelt die helemaal geen sessies vereist, moet u zich niet druk maken over de sessiebibliotheek. Hoewel dat meestal niet het geval is, kunt u de sessiebibliotheek in CodeIgniter autoload zodat sessie-afhandelingsfuncties voor elke webaanvraag worden ingeschakeld.
Ga je gang en open het bestand op application / config / autoload.php
. Zoek het volgende gedeelte.
/ * | -------------------------------------------------- ----------------- | Bibliotheken automatisch laden | -------------------------------------------------- ----------------- | Dit zijn de klassen in systeem / bibliotheken / of uw | applicatie / bibliotheken / directory, met toevoeging van de | 'database'-bibliotheek, wat een beetje een speciaal geval is. | | Voorbeeld: | | $ autoload ['libraries'] = array ('database', 'email', 'session'); | | U kunt ook een alternatieve bibliotheeknaam opgeven die moet worden toegewezen | in de controller: | | $ autoload ['libraries'] = array ('user_agent' => 'ua'); * / $ autoload ['libraries'] = array ();
De $ Autoload [ 'libraries']
array bevat de lijst met bibliotheken die automatisch moeten worden geladen. Volgens onze eis, laten we het veranderen om er zo uit te zien:
$ autoload ['libraries'] = array ('sessie');
Er is ook een andere manier waarop je dat had kunnen bereiken. U kunt de volgende code ergens in uw controllerbestand gebruiken om de sessiebibliotheek te laden.
$ This-> load-> library ( 'session');
Dat is zo ongeveer wat betreft de initialisatie van de sessiebibliotheek.
In de volgende paragrafen zullen we de verschillende bewerkingen doorlopen die u kunt doen met de kern sessiebibliotheek. Om het te demonstreren, bouwen we een voorbeeldcontrollerbestand dat de sessiebibliotheek laadt en methoden biedt die in dit artikel worden besproken.
Ga je gang en maak een bestand aan application / controllers / Example.php
met de volgende inhoud.
load> library ( 'session'); // laad url-helper $ this-> load-> helper ('url'); public function index () / **** SET SESSION DATA **** / // stel een enkel item in sessie $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com') ; // reeks items in sessie instellen $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni', 'interesses' => array ('tennis', 'reizen')); $ This-> session-> set_userdata ($ arraydata); / **** KRIJG SESSIEGEGEVENS **** / // krijg gegevens van sessie-echo "Favoriete Website:". $ This-> session-> gebruikersgegevens ( 'favourite_website'); echo "
"; echo" Author Name: ". $ this-> session-> userdata ('author_name'); echo"
"; echo" Interest (Array Example): ". $ this-> session-> userdata ('interests') [0]; echo"
"; // ontvang alles opgeslagen in sessie tegelijk echo ''; print_r ($ this-> session-> gebruikersgegevens ()); / **** VERWIJDER SESSIONGEGEVENS **** / // schakel specifieke sleutel uit sessie $ this-> session-> unset_userdata ('favourite_website'); // zet meerdere items tegelijk uit $ keys = array ('twitter_id', 'interests'); $ This-> session-> unset_userdata (toetsen $); echo ''; print_r ($ this-> session-> gebruikersgegevens ()); public function setflash () // stel flitsgegevens $ this-> session-> set_flashdata in ('flash_welcome', 'Hey, welkom op de site!'); // markeer bestaande gegevens als flitsgegevens $ this-> session-> set_userdata ('flash_message', 'I am flash message!'); $ This-> session-> mark_as_flash ( 'flash_message'); redirect (voorbeeld / getflash); openbare functie getflash () // ontvang echo van flitstabel "Welkomstbericht van de flitser:". $ This-> session-> flashdata ( 'flash_welcome'); echo ''; print_r ($ this-> session-> flashdata ()); public function tempdata () // temp data $ this-> session-> set_tempdata ('coupon_code', 'XYEceQ!', 300); // markeer bestaande gegevens als tijdelijke gegevens $ this-> session-> set_userdata ('couponcode', 'XYEceQ!'); $ this-> session-> mark_as_temp ('couponcode', 300); // krijg temp data echo $ this-> session-> tempdata ('coupon_code'); public function destroy () $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com'); // destory sessie $ this-> session-> sess_destroy ();Dat is een heel eenvoudig controllerbestand waarmee je bekend zou moeten zijn als een CodeIgniter-ontwikkelaar. Nu zijn we klaar om naar de volgende paar secties te gaan die inzicht bieden in de concepten voor sessiebeheer.
Sessiegegevens toevoegen, ophalen en verwijderen
Laten we om te beginnen de code van ons ophalen
__construct
methode.publieke functie __construct () parent :: __ construct (); // load Session Library $ this-> load-> library ('session'); // laad url-helper $ this-> load-> helper ('url');Voor het geval dat u de sessiebibliotheek niet automatisch hebt geladen, doet u dat in de eerste plaats. Afgezien daarvan hebben we ook het
url
helper waarmee we bepaalde hulpprogramma's kunnen gebruiken die we later zullen zien.Pak vervolgens de code van de
inhoudsopgave
methode.public function index () / **** SET SESSION DATA **** / // stel een enkel item in sessie $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com'); // reeks items in sessie instellen $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni', 'interesses' => array ('tennis', 'reizen')); $ This-> session-> set_userdata ($ arraydata); / **** KRIJG SESSIEGEGEVENS **** / // krijg gegevens van sessie-echo "Favoriete Website:". $ This-> session-> gebruikersgegevens ( 'favourite_website'); echo "
"; echo" Author Name: ". $ this-> session-> userdata ('author_name'); echo"
"; echo" Interest (Array Example): ". $ this-> session-> userdata ('interests') [0]; echo"
"; // ontvang alles opgeslagen in sessie tegelijk echo ''; print_r ($ this-> session-> gebruikersgegevens ()); / **** VERWIJDER SESSIONGEGEVENS **** / // schakel specifieke sleutel uit sessie $ this-> session-> unset_userdata ('favourite_website'); // zet meerdere items tegelijk uit $ keys = array ('twitter_id', 'interests'); $ This-> session-> unset_userdata (toetsen $); echo ''; print_r ($ this-> session-> gebruikersgegevens ());Aangezien u de sessiebibliotheek al hebt geladen, kunt u gebruiken
$ This-> sessie
om toegang te krijgen tot het sessieobject en toegang te krijgen tot de ondersteunde methoden. Deset_userdata
methode wordt gebruikt om een nieuwe sessievariabele te maken, en over het algemeen zijn er twee argumenten nodig: sleutel en waarde.$ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com');U kunt ook de
set_userdata
methode om meerdere variabelen in één gesprek te maken. In dat geval hoeft u slechts één argument op te geven, en dit moet een array zijn zoals hieronder wordt getoond.// reeks items in sessie instellen $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni', 'interesses' => array ('tennis', 'reizen')); $ This-> session-> set_userdata ($ arraydata);Gebruikers met scherpe ogen zouden het opgevallen zijn dat je een array ook als waarde van een willekeurige sessievariabele zou kunnen toewijzen, zoals hierboven getoond in de
belangen
voorbeeld.Laten we nu kijken hoe we de waarde van een willekeurige sessievariabele kunnen terughalen. De
gebruikersgegevens
methode wordt gebruikt om de waarde van een willekeurige sessievariabele op te halen, en meestal heeft deze de sleutel van de sessievariabele die u zoekt als het eerste argument.echo "Favoriete website:". $ This-> session-> gebruikersgegevens ( 'favourite_website');Als u op zoek bent naar een van de array-items, kunt u het volgende gebruiken:
echo "Interest (Array Example):". $ This-> session-> gebruikersgegevens ( 'belangen') [0];Vaker wel dan niet wilt u weten hoeveel variabelen in totaal zijn opgeslagen in een actieve sessie voor foutopsporingsdoeleinden, en dat kunt u ook doen.
// ontvang alles opgeslagen in een sessie in een keer echo ''; print_r ($ this-> session-> gebruikersgegevens ());Ja hetzelfde
gebruikersgegevens
methode komt ons te hulp! Als u geen argumenten doorgeeft aan degebruikersgegevens
methode worden alle sessievariabelen geretourneerd.Laten we tot slot zien hoe u variabelen uit de sessie kunt verwijderen. Het is de
unset_userdata
methode die u kunt gebruiken als u sessie-items wilt verwijderen.// schakel de specifieke sleutel uit sessie $ this-> session-> unset_userdata ('favourite_website');En hier is de variant van dezelfde methode die laat zien hoe meerdere vermeldingen in één keer kunnen worden verwijderd.
// zet meerdere items tegelijk uit $ keys = array ('twitter_id', 'interests'); $ This-> session-> unset_userdata (toetsen $);En dat zou het moeten verwijderen
twitter_id
enbelangen
ingangen van de sessie.Ga je gang en test de
inhoudsopgave
methode om dingen in actie te zien.Nuttige Goodies: Flashdata en Tempdata
In de laatste sectie bespraken we de basisprincipes van sessie-afhandeling in CodeIgniter. In deze sectie bespreken we een paar andere hulpprogramma's die door de sessiebibliotheek worden aangeboden.
In uw dagelijkse ontwikkeling moet u vaak berichten weergeven als reactie op bepaalde gebruikersacties. U wilt bijvoorbeeld een succesbericht weergeven wanneer iemand een opmerking plaatst op uw site en het bericht slechts één keer moet worden weergegeven. De
set_flashdata
methode is een perfecte kandidaat voor dit soort gebruik.Eigenlijk,
set_flashdata
lijkt erg op deset_userdata
methode waarmee u een waarde in een sessie kunt opslaan. De enige uitzondering is dat de sessiewaarde ingesteld door deflashdata
methode is alleen beschikbaar voor de volgende aanvraag. In volgende aanvragen hebt u geen toegang meer tot deze variabelen omdat ze zijn gewist.Pak de code van de
setflash
methode.openbare functie setflash () // set flash data $ this-> session-> set_flashdata ('flash_welcome', 'Hey, welkom op de site!'); // markeer bestaande gegevens als flitsgegevens $ this-> session-> set_userdata ('flash_message', 'I am flash message!'); $ This-> session-> mark_as_flash ( 'flash_message'); redirect (voorbeeld / getflash);U kunt een nieuwe maken
flashdata
variabele op dezelfde manier waarop u een normale sessievariabele zou hebben gemaakt met behulp van deset_userdata
methode. Aan de andere kant kunt u ook een bestaande sessievariabele markeren als eenflashdata
variabel. In dat geval moet u demark_as_flash
methode, zoals weergegeven in de bovenstaande code.Uiteindelijk leiden we de gebruiker door naar de
krijg flits
methode die laat zien hoe je flashdata-variabelen gebruikt die zijn ingesteld in desetflash
methode. Laten we snel kijken naar dekrijg flits
methode.openbare functie getflash () // ontvang echo van flitstabel "Welkomstbericht van de flitser:". $ This-> session-> flashdata ( 'flash_welcome'); echo ''; print_r ($ this-> session-> flashdata ());Zoals verwacht, is er een
flashdata
methode waarmee u sessievariabelen kunt ophalen die zijn opgeslagen als flashdata. Als je deflashdata
methode zonder argumenten, retourneert het alle flashgegevensvariabelen vergelijkbaar met die van degebruikersgegevens
methode.Ga je gang en test de
setflash
methode. U wordt omgeleid naar de getflash-URL en het bericht wordt weergegeven. Als u de getflash-pagina vernieuwt, wordt dit bericht niet meer weergegeven!Vervolgens is er nog een andere variant van de sessiebibliotheek in deze categorie - de tempdata-sessievariabelen. Als u sessievariabelen voor een specifieke periode wilt maken, moet u de
set_tempdata
methode is degene die je zoekt.Als u bijvoorbeeld een sessievariabele wilt maken die na een bepaalde periode automatisch moet worden verwijderd, kunt u de .variabele gebruiken
set_tempdata
methode om een dergelijke variabele te maken, zoals weergegeven in de volgende methode.public function tempdata () // temp data $ this-> session-> set_tempdata ('coupon_code', 'XYEceQ!', 300); // markeer bestaande gegevens als tijdelijke gegevens $ this-> session-> set_userdata ('couponcode', 'XYEceQ!'); $ this-> session-> mark_as_temp ('couponcode', 300); // krijg temp data echo $ this-> session-> tempdata ('coupon_code');Het derde argument in de
set_tempdata
methode geeft het aantal seconden aan waarna de variabele uit de sessie wordt verwijderd.U kunt ook een bestaande sessievariabele markeren als temp-gegevens met behulp van de
mark_as_temp
methode op voorwaarde dat u al een sessievariabele hebt gemaakt met behulp van deset_userdata
methode.Ten slotte kunt u de
TempData
methode om de waarde van elke tempdata-variabele op te halen.Het is dus fijn om dergelijke gebruiksmethoden tot uw beschikking te hebben in uw dagelijkse ontwikkelingslevenscyclus!
Wat u niet moet vergeten: sessie vernietigen
Het vernietigen van de sessie is waarschijnlijk het laatste wat u zou willen doen wanneer de gebruiker uitlogt. Het zorgt ervoor dat de tot nu toe ingestelde sessievariabelen worden verwijderd uit de actieve sessie en niet langer beschikbaar zijn voor volgende aanvragen.
Laten we de code van de
vernietigen
methode en ga er doorheen.public function destroy () $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com'); // vernietig sessie $ this-> session-> sess_destroy ();Het is de
sess_destroy
methode die ons helpt om de actieve sessie te vernietigen. Uiteraard worden ook tempdata en flashdata-variabelen verwijderd die in de actieve sessie waren ingesteld.Zorg ervoor dat je de gewoonte hebt om een sessie te vernietigen als deze niet langer bruikbaar is in de huidige gebruikerscontext.
Cherry on the Top: Sessie-stuurprogramma's
We zijn bezig met het laatste gedeelte van dit artikel: de stuurprogramma's voor de sessie. Vaker wel dan niet, hoeft u zich niet druk te maken over het configureren van het sessiestuurprogramma in uw toepassing, omdat het standaardsessiebesturingsbestand, het bestandssysteem, al is geconfigureerd met de standaardinstelling.
Het is dus het bestandssysteem dat alle sessie-gerelateerde gegevens bevat, en het wordt veel gebruikt en is de geaccepteerde standaard voor sessie-afhandeling. Dat gezegd hebbende, ondersteunt CodeIgniter ook andere sessiestuurprogramma's die u zou kunnen gebruiken als u zou willen overschakelen van het standaard stuurprogramma van het bestandssysteem.
Hier is een lijst met alle ondersteunde sessiestuurprogramma's in CodeIgniter:
Het stuurprogramma voor de databasessessie slaat, zoals de naam al doet vermoeden, de sessiegegevens op in de database die u hebt geconfigureerd voor uw toepassing CodeIgniter.
Aan de andere kant hebben de andere twee sessiestuurprogramma's geheugenmechanismen in het geheugen die de voorkeur hebben voor krachtige websites.
In de application / config / config.php
bestand, kunt u het sessiestuurprogramma configureren dat u in uw toepassing wilt gebruiken.
$ config ['sess_driver'] = 'database'; $ config ['sess_save_path'] = 'custom_sessions';
Het vertelt CodeIgniter om het stuurprogramma voor de databasesessie te gebruiken en de sessiegegevens worden opgeslagen in de custom_sessions
MySQL-tabel.
De bespreking van elk sessiestuurprogramma valt buiten het bestek van dit artikel, maar u kunt de officiële documentatie over de site doorlopen die een gedetailleerde gids biedt voor elke bestuurder.
Sessiebehandeling in CodeIgniter was het onderwerp van de tutorial van vandaag en we hebben dit grondig besproken door naar elk aspect van het onderwerp te kijken.
Beginnend met basissessieoperaties, hebben we ook die coole flashdata- en tempdata-methoden doorlopen en het was de bespreking van sessiedrivers die ons artikel afsloten.
Zoals altijd zou u uw vragen en suggesties kunnen gebruiken met behulp van de onderstaande feed!