Hoe te werken met sessiegegevens in CodeIgniter

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.

Een sessiebibliotheek laden

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. De set_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 de gebruikersgegevens 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 en belangen 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 de set_userdata methode waarmee u een waarde in een sessie kunt opslaan. De enige uitzondering is dat de sessiewaarde ingesteld door de flashdata 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 de set_userdata methode. Aan de andere kant kunt u ook een bestaande sessievariabele markeren als een flashdata variabel. In dat geval moet u de mark_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 de setflash methode. Laten we snel kijken naar de krijg 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 de flashdata methode zonder argumenten, retourneert het alle flashgegevensvariabelen vergelijkbaar met die van de gebruikersgegevens 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 de set_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:

  • bestanden
  • Database
  • Redis
  • memcached

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.

Conclusie

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!