Hur man arbetar med sessiondata i CodeIgniter

Som en CodeIgniter-utvecklare är det verkligen viktigt för dig att förstå hur man arbetar med kärnbiblioteket. Naturligtvis kan du alltid använda standardvärdet $ _SESSION syntax, men det rekommenderas alltid att använda omslaget istället.

Från och med hur man laddar ett sessionsbibliotek flyttar vi till diskussionen om hur man lägger till, hämtar, tar bort och förstör sessionvariabler. I det sista segmentet kommer vi att titta på de olika inbyggda sessionsdrivrutinerna till ditt förfogande som tillhandahålls av CodeIgniter-ramen själv.

Så här lägger du till ett sessionbibliotek

Om du vill arbeta med sessioner i CodeIgniter är det första du behöver ett inbyggt sessionsbibliotek. Om inte och tills du utvecklar en webbapplikation som inte kräver sessioner alls, borde du inte bry sig om sessionsbiblioteket. Medan det inte är fallet för det mesta kan du autoload sessionbiblioteket i CodeIgniter så att det möjliggör sessionshanteringsfunktioner för varje webbförfrågan.

Gå vidare och öppna filen som finns på application / config / autoload.php. Hitta följande avsnitt.

/ * | -------------------------------------------------- ----------------- | Automatiska laddningsbibliotek | -------------------------------------------------- ----------------- | Det här är klasserna i system / bibliotek / eller din | applikation / bibliotek / katalog, med tillägg av | databasbiblioteket, vilket är något av ett speciellt fall. | | Prototyp: | | $ autoload ['libraries'] = array ('databas', 'email', 'session'); | | Du kan också tillhandahålla ett alternativt biblioteksnamn som ska tilldelas | i regulatorn: | | $ autoload ['libraries'] = array ('user_agent' => 'ua'); * / $ autoload ['libraries'] = array ();

De $ Autoload [ 'bibliotek'] array innehåller listan över bibliotek som behöver autoloaded. Enligt vårt krav, låt oss ändra det för att se så ut:

$ autoload ['libraries'] = array ('session');

Det finns också ett annat sätt som du kan ha uppnått. Du kan använda följande kod någonstans i din kontrollerfil för att ladda upp sessionsbiblioteket.

$ This-> last> bibliotek (session ');

Det är ganska mycket så mycket som initialiseringen av sessionsbiblioteket berörs.

I nästa avsnitt kommer vi att gå igenom de olika operationerna som du kan göra med kärnbiblioteket. För att visa det kommer vi att bygga en exempelförvaltningsfil som laddar upp sessionsbiblioteket och ger metoder som kommer att diskuteras i hela denna artikel.

Gå vidare och skapa en fil application / controllers / Example.php med följande innehåll.

last> bibliotek ( 'session'); // ladda urlhjälpar $ this-> load-> hjälper ('url');  offentliga funktionsindex () / **** SET SESSION DATA **** / // ställa in enstaka objekt i session $ this-> session-> set_userdata ('favorite_website', 'http://tutsplus.com') ; // set array of items in session $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni' 'interests' => array ('tennis', 'resa')); $ This-> Session> set_userdata ($ arraydata); / **** FÅ SESSION DATA **** / // Hämta data från sessionen echo "Favoritwebbplats:". $ This-> Session> Userdata (favourite_website '); eko "
"; echo" Författarnamn: ". $ this-> session-> userdata ('author_name'); echo"
"echo" Intressen (Array-exempel): ". $ this-> session-> userdata ('intressen') [0]; echo"
"; // få e'thing lagras i session samtidigt echo"
'; print_r ($ this-> Session> Userdata ()); / **** FEL AV SESSION DATA **** / // unset specifik nyckel från session $ this-> session-> unset_userdata ('favorite_website'); // avmarkera flera objekt på en gång $ keys = array ('twitter_id', 'interests'); $ This-> Session> unset_userdata (nycklar $); eko "
'; print_r ($ this-> Session> Userdata ());  public function setflash () // ställa in flashdata $ this-> session-> set_flashdata ('flash_welcome', 'Hej, välkommen till webbplatsen!'); // markera befintliga data som flashdata $ this-> session-> set_userdata ('flash_message', 'I'm flash message!'); $ This-> Session> mark_as_flash (flash_message '); omdirigera ( 'exempel / GetFlash');  offentlig funktion getflash () // få flash data echo "Flash välkomstmeddelande:". $ This-> Session> flashdata (flash_welcome '); eko "
'; print_r ($ this-> Session> flashdata ());  public function tempdata () // set temp data $ this-> session-> set_tempdata ('coupon_code', 'XYEceQ!', 300); // markera befintliga data som temp data $ this-> session-> set_userdata ('coupon_code', 'XYEceQ!'); $ this-> session-> mark_as_temp ('coupon_code', 300); // få temp data echo $ this-> session-> tempdata ('coupon_code');  allmän funktion förstör () $ this-> session-> set_userdata ('favorite_website', 'http://tutsplus.com'); // destory session $ this-> session-> sess_destroy (); 

Det är en mycket grundläggande kontrollerfil du borde vara bekant med som en CodeIgniter-utvecklare. Nu är vi redo att flytta till nästa avsnitt som ger insikt i koncepten för hantering av session.

Så här lägger du till, hämtar och tar bort sessiondata

Till att börja med, låt oss hämta koden för vår __konstruera metod.

offentlig funktion __construct () förälder :: __ construct (); // ladda session biblioteket $ this-> ladda-> bibliotek ("session"); // ladda urlhjälpar $ this-> load-> hjälper ('url'); 

Bara om du inte har autoloaded sessionbiblioteket kommer det att göra det i första hand. Bortsett från det har vi också laddat url hjälpen som tillåter oss att använda vissa verktygsmetoder som vi kommer att se senare.

Ta sedan tag i koden för index metod.

public function index () / **** SET SESSION DATA **** / // ställa in enstaka objekt i session $ this-> session-> set_userdata ('favorite_website', 'http://tutsplus.com'); // set array of items in session $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni' 'interests' => array ('tennis', 'resa')); $ This-> Session> set_userdata ($ arraydata); / **** FÅ SESSION DATA **** / // Hämta data från sessionen echo "Favoritwebbplats:". $ This-> Session> Userdata (favourite_website '); eko "
"; echo" Författarnamn: ". $ this-> session-> userdata ('author_name'); echo"
"echo" Intressen (Array-exempel): ". $ this-> session-> userdata ('intressen') [0]; echo"
"; // få e'thing lagras i session samtidigt echo"
'; print_r ($ this-> Session> Userdata ()); / **** FEL AV SESSION DATA **** / // unset specifik nyckel från session $ this-> session-> unset_userdata ('favorite_website'); // avmarkera flera objekt på en gång $ keys = array ('twitter_id', 'interests'); $ This-> Session> unset_userdata (nycklar $); eko "
'; print_r ($ this-> Session> Userdata ()); 

När du har laddat in sessionbiblioteket redan kan du använda $ This-> session för att komma åt sessionsobjektet och få åtkomst till de metoder som stöds. De set_userdata Metoden används för att skapa en ny sessionsvariabel och i allmänhet tar det två argument-nyckel och värde.

$ this-> session-> set_userdata ("favoritwebbplats", "http://tutsplus.com");

Du kan också använda set_userdata Metod för att skapa flera variabler i ett enda samtal. I det fallet behöver du bara ange ett argument, och det ska vara en matris som visas nedan.

// set array of items in session $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni' 'interests' => array ('tennis', 'resa')); $ This-> Session> set_userdata ($ arraydata);

Användare med skarpa ögon skulle ha märkt att du också kan tilldela en array som ett värde av någon session variabel, som visas ovan i intressen exempel.

Nu, låt oss se hur man hämtar värdet av någon session variabel. De användardata Metoden används för att hämta värdet på någon session variabel och vanligtvis behöver den nyckeln till den session variabel du letar efter som första argumentet.

echo "Favoritwebbplats:". $ This-> Session> Userdata (favourite_website ');

Om du letar efter en av matrisposterna kan du använda följande:

eko "Ränta (Array Exempel):". $ This-> Session-> userdata ( 'intressen') [0];

Ofta vill du veta hur många variabler totalt lagras i en aktiv session för debugging, och det kan du också göra.

// få e'thing lagras i session samtidigt echo '
'; print_r ($ this-> Session> Userdata ());

Ja, detsamma användardata Metoden kommer till vår räddning! Om du inte skickar något argument till användardata metod kommer det att returnera alla session variabler.

Slutligen, låt oss se hur du kan ta bort variabler från sessionen. Det är unset_userdata metod som du kan använda om du vill ta bort eventuella sessionsuppgifter.

// Unset specifik nyckel från session $ this-> session-> unset_userdata ('favorite_website');

Och här är variationen av samma metod som visar hur man tar bort flera poster samtidigt.

// avmarkera flera objekt på en gång $ keys = array ('twitter_id', 'interests'); $ This-> Session> unset_userdata (nycklar $);

Och det borde ta bort twitter_id och intressen poster från sessionen.

Fortsätt och testa index metod för att se saker i åtgärd.

Användbara godsaker: Flashdata och Tempdata

I det sista avsnittet diskuterade vi grunderna för sessionshantering i CodeIgniter. I det här avsnittet diskuterar vi några andra verktyg som tillhandahålls av sessionen.

I din dagliga utveckling behöver du ofta visa meddelanden som svar på vissa användaråtgärder. Som ett exempel vill du visa ett succémeddelande när någon postar en kommentar på din webbplats, och meddelandet ska bara visas en gång. De set_flashdata Metod är en perfekt kandidat för denna typ av användningsfall.

Faktiskt, set_flashdata är mycket lik den set_userdata metod genom att det låter dig spara ett värde i sessionen. Det enda undantaget är att det sessionsvärde som anges av flashdata Metoden är endast tillgänglig för nästa begäran. I efterföljande förfrågningar kommer du inte längre kunna komma åt dessa variabler när de rensades.

Ta tag i koden för setflash metod.

public function setflash () // ställa in flashdata $ this-> session-> set_flashdata ('flash_welcome', 'Hej, välkommen till webbplatsen!'); // markera befintliga data som flashdata $ this-> session-> set_userdata ('flash_message', 'I'm flash message!'); $ This-> Session> mark_as_flash (flash_message '); omdirigera ( 'exempel / GetFlash'); 

Du kan skapa en ny flashdata variabel på samma sätt som du skulle ha skapat en vanlig session variabel med hjälp av set_userdata metod. Å andra sidan kan du också markera en existerande session variabel som en flashdata variabel. I så fall måste du använda mark_as_flash metod, som visas i ovanstående kod.

Slutligen omdirigerar vi användaren till GetFlash metod som visar hur man använder flashdata-variabler som ställdes in i setflash metod. Låt oss ta en titt på GetFlash metod.

offentlig funktion getflash () // få flash data echo "Flash välkomstmeddelande:". $ This-> Session> flashdata (flash_welcome '); eko "
'; print_r ($ this-> Session> flashdata ()); 

Som förväntat finns det en flashdata metod som låter dig hämta session variabler lagrade som flashdata. Om du ringer till flashdata metod utan några argument, det kommer att returnera alla flashdata variabler som liknar den för användardata metod.

Fortsätt och testa setflash metod. Du omdirigeras till getflash-webbadressen och du får se meddelandet. Om du uppdaterar getflash-sidan ser du inte meddelandet igen!

Därefter finns en annan variant som tillhandahålls av sessionsbiblioteket i den här kategorin - Tempdata-sessionvariablerna. Om du vill skapa sessionvariabler för en viss tidsperiod, ska set_tempdata Metoden är den du letar efter.

Om du till exempel vill skapa en session variabel som automatiskt ska raderas efter en viss tidsperiod, kan du använda set_tempdata metod för att skapa en sådan variabel, som visas i följande metod.

allmän funktion tempdata () // set temp data $ this-> session-> set_tempdata ('coupon_code', 'XYEceQ!', 300); // markera befintliga data som temp data $ this-> session-> set_userdata ('coupon_code', 'XYEceQ!'); $ this-> session-> mark_as_temp ('coupon_code', 300); // få temp data echo $ this-> session-> tempdata ('coupon_code'); 

Det tredje argumentet i set_tempdata Metoden anger antalet sekunder efter vilka variabeln kommer att raderas från sessionen.

Du kan också markera en existerande session variabel som tempdata med hjälp av mark_as_temp metod förutsatt att du redan har skapat en session variabel med hjälp av set_userdata metod.

Slutligen kan du använda tempdata metod för att hämta värdet av någon tempdata-variabel.

Så det är trevligt att ha sådana användningsmetoder till ditt förfogande i din dagliga utvecklingslivscykel!

Vad du inte bör glömma: Session förstör

Att förstöra sessionen är förmodligen det sista du vill göra när användaren loggar ut. Det säkerställer att sessionvariablerna hittills raderas från den aktiva sessionen och är inte längre tillgängliga för efterföljande förfrågningar.

Låt oss dra in koden för förstöra metod och gå igenom den.

allmän funktion förstör () $ this-> session-> set_userdata ('favoritwebbplats', 'http://tutsplus.com'); // förstör session $ this-> session-> sess_destroy (); 

Det är sess_destroy metod som hjälper oss att förstöra den aktiva sessionen. Självklart tar det också bort tempdata och flashdata-variabler som ställdes in i den aktiva sessionen.

Se till att du blir van vid att förstöra en session när den inte längre är användbar i den nuvarande användarkontexten.

Körsbär på toppen: Session Drivers

Vi går in i det sista avsnittet i denna artikel-sessionsdrivrutinerna. Ofta stör du inte om att konfigurera sessionsdrivrutinen i din ansökan som standard sessionsdrivrutin, är filsystemet konfigurerat redan med standardinställningen.

Så det är filsystemet som innehåller all sessionsrelaterad data, och den används ofta och är den accepterade standarden för sessionshantering. Med detta sagt, stöder CodeIgniter även andra sessiondrivrutiner som du kan använda om du vill byta från standardfilsystemet.

Här är en lista över alla stödda sessionsdrivrutiner i CodeIgniter:

  • filer
  • Databas
  • Redis
  • memcached

Databas-drivrutinen, som namnet antyder, lagrar sessionsdata i databasen som du har konfigurerat för ditt CodeIgniter-program.

Å andra sidan är de andra två sessionsdrivrutinerna lagringsmekanismer för minne som är föredragna för högpresterande webbplatser.

I application / config / config.php fil kan du konfigurera den sessionsdrivrutin som du vill använda i din ansökan.

$ config ['sess_driver'] = 'databas'; $ config ['sess_save_path'] = 'custom_sessions';

Det berättar CodeIgniter att använda databas sessionsdrivrutinen och sessionsdata sparas i custom_sessions MySQL-tabellen.

Diskussionen om varje sessiondrivare ligger utanför ramen för denna artikel, men du kan gå igenom den officiella webbplatsdokumentationen som ger en djupguide för varje förare.

Slutsats

Sessionshantering i CodeIgniter var ämnet för dagens handledning, och vi diskuterade det noggrant genom att titta på alla aspekter av ämnet.

Från och med grundläggande sessionsoperationer gick vi även igenom de coola flashdata- och tempdata-metoderna, och det var diskussionen om sessiondrivrutiner som avslutade vår artikel.

Som alltid kan du skrika ut dina frågor och förslag med hjälp av flödet nedan!