<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>objektorientering-arkiv - Webbdesign och Webbutveckling i Skövde</title>
	<atom:link href="https://wibergsweb.se/tag/objektorientering/feed/" rel="self" type="application/rss+xml" />
	<link>https://wibergsweb.se/tag/objektorientering/</link>
	<description></description>
	<lastBuildDate>Sat, 04 Jun 2016 07:19:47 +0000</lastBuildDate>
	<language>sv-SE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>
	<item>
		<title>Sessioner och WordPress &#8211; &#8221;det som går&#8221; är inte alltid rätt&#8230;</title>
		<link>https://wibergsweb.se/sessioner-och-wordpress-det-som-gar-ar-inte-alltid-ratt/</link>
		
		<dc:creator><![CDATA[wibergsweb2]]></dc:creator>
		<pubDate>Sun, 23 Aug 2015 05:11:16 +0000</pubDate>
				<category><![CDATA[blogposts]]></category>
		<category><![CDATA[objektorientering]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[sessioner]]></category>
		<category><![CDATA[webbutveckling]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://wibergsweb.se/?p=1445</guid>

					<description><![CDATA[<p>Vad är sessioner? Sessioner (eng. sessions) är ett sätt att hantera data på en webbplats  för varje specifik besökare på sin…</p>
<p> <a class="continue-reading-link" href="https://wibergsweb.se/sessioner-och-wordpress-det-som-gar-ar-inte-alltid-ratt/"><span>Läs mer</span><i class="crycon-right-dir"></i></a> </p>
<p>Inlägget <a href="https://wibergsweb.se/sessioner-och-wordpress-det-som-gar-ar-inte-alltid-ratt/">Sessioner och WordPress &#8211; &#8221;det som går&#8221; är inte alltid rätt&#8230;</a> dök först upp på <a href="https://wibergsweb.se">Webbdesign och Webbutveckling i Skövde</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Vad är sessioner?</h2>
<p><strong>Sessioner</strong> (eng. sessions) är ett sätt att hantera data på en webbplats  för varje specifik besökare på sin webbplats i &#8221;bakgrunden&#8221;. När sessioner används på en webbplats så försvinner denna data inom en viss tid. Hur lång tid denna tid är beror på en inställning som görs på server-nivå.</p>
<p>Ett exempel på detta är att hålla reda på vilka varor det finns i en varukorg i sin webbshop för varje besökare. Skulle man skicka den här typen av information via url&#8217;n / webbadressen skulle det kunna se ut så här: <strong>http://snyggakalsonger.se/webbshop/salming-traningsklader-tee/</strong><strong>?current_products=5&amp;userid=4098230498<br />
</strong><strong><br />
Med hjälp av sessioner</strong> behöver man inte skicka med dessa parametrar i url&#8217;en (nödvändig data hanteras i bakgrunden) och då skulle ovanstående adress se ut så här istället:  <strong>http://snyggakalsonger.se/webbshop/salming-traningsklader-tee/</strong></p>
<p>Att använda sig av <strong>sessioner</strong> blir både mer hanterbart, ser &#8221;snyggare&#8221; ut i både adressfältet i webbläsaren och i googles sökresultat.</p>
<h2>Sessioner i PHP</h2>
<p>I sin enklaste form i PHP kan det se ut så här när man jobbar med <strong>sessioner</strong>:</p>
<p><strong>Sidan där sessionen skapas:</strong></p>
<pre><code><span class="tab">&lt;?php</span>
<span class="tab">session_start(); //Start med att hantera sessioner</span>
<span class="tab">$_SESSION['nr_products'] = 7;</span>
</code></pre>
<p><strong>Sidan där man vill hämta informationen:</strong></p>
<pre><code><span class="tab">&lt;?php</span>
<span class="tab">session_start(); //Start med att hantera sessioner</span>
<span class="tab">echo $_SESSION['nr_products']; //Skriver ut 7</span>
</code></pre>
<p>Givetvis finns det vissa specifika saker att tänka på med <strong>sessioner</strong> (precis som all annan programmering) men grunden att hantera s.k. sessions (sessioner) i PHP är relativt enkelt &#8211; enligt det koncept som finns ovan i exemplet. Ett annat mycket vanligt tillämpningsområde för sessioner är hantering av login. Hur ska man annars få någon säkerhet i det hela? Att skriva användarnamn och lösenord i klartext i webbläsaren är inte bara dumt, det är idiotiskt.</p>
<h2>Sessioner i WordPress</h2>
<p>Av någon anledning så har skaparna / utvecklarna av WordPress valt att inte ha support för <strong>sessioner </strong>/ sessions som standard. Ett argument för att inte använda sessions är att man kan använda annat för att uppnå samma resultat och det kan man i de flesta fall, men det är inte alltid möjligt. Med tanke på att WordPress bygger på <strong>PHP</strong> och <strong>MySQL</strong> och de ändå måste ha något sätt att hantera inloggade användare (som görs med hjälp av sessioner) så tycker jag personligen det är mycket märkligt.  <strong><a href="https://wibergsweb.se/Wordpress-ar-fantastiskt/">WordPress är fantastiskt</a></strong> på alla sätt och vis, men att &#8221;aktivera&#8221;  sessionshantering  i WordPress känns onödigt krångligt.</p>
<h3>Aktivera sessioner i WordPress</h3>
<p>För att kunna använda sessions i WordPress finns tre olika grundläggande sätt att &#8221;aktivera&#8221; sessioner:</p>
<h4>1. <strong>Lägg in kod i wp-config.php (de första raderna)</strong></h4>
<pre><code><span class="tab">if (!session_id())</span>
<span class="tab">session_start();</span></code></pre>
<p>Detta är kanske det allra enklast sättet att aktivera sessioner i WordPress men det förutsätter att man har tillgång och möjlighet att ändra i den filen. Ingår din WordPress-site i en multisite-installation för WordPress bör du också undvika detta, då du troligtvis inte vill aktivera sessioner för alla sajterna.</p>
<h4>2. <strong>Lägg in kod i en plugin (tillägg) </strong></h4>
<pre><code><span class="tab">&lt;?php</span>
<span class="tab">add_action('init', 'mySession', 1);</span>
<span class="tab">function mySession() {</span>
<span class="tab one">if(!session_id()) {</span>
<span class="tab two">session_start();</span>
<span class="tab one">}</span>
}</code></pre>
<p>Ska du skapa ett tillägg för WordPress så får du använda dig av ovanstående metod eller ännu hellre med ett objektorienterat förhållningssätt:</p>
<pre><span class="tab"><code>
<span class="tab">&lt;?php</span>
<span class="tab">$mysessionObj= new mySessionHandler();</span>
<span class="tab">class mySessionHandler {</span>

<span class="tab one">public function __construct() {</span>
<span class="tab two">add_action( 'init', array( $this, 'mySession' ) );</span>
<span class="tab one">}</span>

<span class="tab one">function mySession() {</span>
<span class="tab two">if(!session_id()) {</span>
<span class="tab three">session_start();</span>
<span class="tab two">}</span>
<span class="tab one">}</span>

<span class="tab">}</span></code></span></pre>
<h4>3. <strong>Använd befintlig sessionshanterings-plugin</strong></h4>
<p>Det är inte lätt att hitta någon befintlig sessionshanteringsplugin i Wordpres men <a href="https://Wordpress.org/plugins/wp-session-manager/" target="_blank">WP Session Manager</a> är en stabil plugin som hanterar sessioner på ett bra sätt.</p>
<p>För att hantera sessioner med detta plugin/tillägg så kan man göra så här:</p>
<pre><code>
<span class="tab">&lt;?php</span>
<span class="tab">global $wp_session;</span>
<span class="tab">$wp_session = WP_Session::get_instance();</span>
<span class="tab">$wp_session['nr_products']=7;</span>
</code></pre>
<p>och i en mall/template så kan sedan hämta denna session så här:</p>
<pre><code>
<span class="tab">&lt;?php</span>
<span class="tab">global $wp_session;</span>
<span class="tab">$wp_session = WP_Session::get_instance();</span>
<span class="tab">$wp_session['nr_products']=7;</span>
</code></pre>
<p>Att göra på ovanstående sätt är inte speciellt flexibelt och risken för att ovanstående kod ska bli &#8221;spretig&#8221; / &#8221;rörig&#8221; är stor och kommer lätt bli svår att förstå och underhålla. Även om det går att göra på ovanstående sätt så betyder det inte alltid att &#8221;det som går&#8221; är &#8221;det som är rätt&#8221;.</p>
<p><strong>Använd (alltid) ett objektorienterad förhållningssätt:</strong><br />
Om man t.ex. vill spara det man skrivit in i ett formulär så skulle man kan göra en &#8221;FormHandler&#8221;-klass.</p>
<pre><code>
<span class="tab">&lt;?php</span>
<span class="tab one">class FormHandler {</span>
<span class="tab one">public $wp_session = null; //Use of Plugin WP Session manger, so we can handle sessions</span>

<span class="tab two">public function __construct() {</span>
<span class="tab three">$this-&gt;wp_session = WP_Session::get_instance();</span>
<span class="tab two">}</span>

<span class="tab two">public function get_current_formvalues() {</span>
<span class="tab three">return $this-&gt;wp_session['formvalues'];</span>
<span class="tab two">}</span>
   
<span class="tab two">public function set_formvalues($formvalues) {</span>
<span class="tab three">if ($this-&gt;wp_session === null) {</span>
<span class="tab three">$this-&gt;wp_session = WP_Session::get_instance();</span>
<span class="tab three">}</span>
<span class="tab three">$this-&gt;wp_session['formvalues'] = $formvalues;</span>
<span class="tab two">}</span>

<span class="tab two">public function get_current_formvalues() {</span>
<span class="tab three">return $this-&gt;wp_session['formvalues'];</span>
<span class="tab two">}</span>
<span class="tab one">}</span>
</code></pre>
<p>Skapa sedan instansen av objektet och lägg in värden från ett postat formulär:</p>
<pre><code><span class="tab">$form = new FormHandler();</span>
<span class="tab">$name = $_POST['company']; //Name of company</span>
<span class="tab">$phone = $_POST['phone']; //Phonenr to company</span>
<span class="tab">$formdata = array('name' =&gt; $name, 'phone' =&gt; $phone);</span>
<span class="tab">$form-&gt;set_formvalues($formdata);</span>
</code></pre>
<p>Detta kan tyckas vara ett krångligt sätt att göra det på, men finessen (som all annan objektorienterad <strong><a href="https://wibergsweb.se/webbutveckling/">webbutveckling</a></strong>) är att det blir lätt att &#8221;bygga på&#8221; utifrån en grund på ett flexibelt sätt.</p>
<p>Här är ett exempel där man skapar ett kontaktformulär och ett formulär för intresseanmälan:</p>
<p><strong>Kontaktformulär</strong></p>
<pre><code>
<span class="tab">&lt;?php</span>
<span class="tab">class Contactform extends FormHandler {</span>
<span class="tab one">public __construct() {</span>
<span class="tab two">        parent::__construct();</span>
<span class="tab two">        //Do something that applies to the contactform only</span>
<span class="tab one">        }</span>
<span class="tab one">        public function set_values() {</span>
<span class="tab two">            //Set values into the wp_sessions object</span>
<span class="tab two">            //based on posted form values for this form</span>
<span class="tab two">            $this-&gt;set_formvalues($postformvalues);</span>
<span class="tab one">        }</span>
<span class="tab one">        public function display() {</span>
<span class="tab two">            $formvalues = $this-&gt;get_current_formvalues();</span>
<span class="tab two">            //Show the interestform with current $formvalues from session;</span>
<span class="tab two">            //Validate fields/handle errors for contactform</span>
<span class="tab one">        }</span>
<span class="tab">}</span></code></pre>
<p><strong>Intresseanmälan</strong></p>
<pre><code><span class="tab">class InterestForm extends FormHandler {</span>
<span class="tab one">public __construct() {</span>
<span class="tab two">        parent::__construct();</span>
<span class="tab two">        //Do something that applies to the interestform only</span>
<span class="tab one">        }</span>
<span class="tab one">        public function set_values() {</span>
<span class="tab two">            //Set values into the wp_sessions object</span>
<span class="tab two">            //based on posted form values for this form</span>
<span class="tab two">            $this-&gt;set_formvalues($postformvalues);</span>
<span class="tab one">        }</span>
<span class="tab one">        public function display() {</span>
<span class="tab two">            $formvalues = $this-&gt;get_current_formvalues();</span>
<span class="tab two">            //Show the interestform with current $formvalues from session;</span>
<span class="tab two">            //Validate fields/handle errors for contactform</span>
<span class="tab one">        }</span>
<span class="tab">}</span></code></pre>
<p>Vill man sedan visa ett kontaktformulär skriver man så här:</p>
<pre><code><span class="tab">$form = new ContactForm();</span>
<span class="tab">$form-&gt;display();</span></code></pre>
<p>Och intresseanmälan så här:</p>
<pre><code><span class="tab">$form = new InterestForm();</span>
<span class="tab">$form-&gt;display();</span></code></pre>
<p>Fördelen med detta är att dels att du kan återanvända funktioner (som finns i FormHandler), det blir struktur och det blir lättare att bygga på vad som krävs enbart för kontaktformuläret eller intresseformuläret. Det finns ingen anledning att inte använda objektorienterat &#8211; inte ens i WordPress. Det kan tyckas krångligare till en början men på lång sikt är det betydligt lättare att underhålla och förstå vad som sker i koden.</p>
<p>Ha alltid detta i åtanke vid all typ av <a href="https://wibergsweb.se/webbutveckling/"><strong>webbutveckling</strong> </a>och när jag tänker efter &#8211; vid all typ av programmering:  <strong>&#8221;Det som går&#8221; är inte alltid det som är rätt&#8230;.</strong></p>
<h4>Författare till detta inlägg (till denna blogg som handlar om webbdesign, webbutveckling och SEO)</h4>
<p>Jag heter <a href="https://www.linkedin.com/pub/gustav-wiberg/51/a48/55" target="_blank">Gustav Wiberg</a> och driver <strong><a href="https://wibergsweb.se/skovdes-genuina-webbyra-alla-parter-nojda/">Skövdes genuina webbyrå Wibergs Web</a></strong>. <a href="https://wibergsweb.se/kontakt/">Kontakta mig genom att klicka här</a>.</p>
<p>Inlägget <a href="https://wibergsweb.se/sessioner-och-wordpress-det-som-gar-ar-inte-alltid-ratt/">Sessioner och WordPress &#8211; &#8221;det som går&#8221; är inte alltid rätt&#8230;</a> dök först upp på <a href="https://wibergsweb.se">Webbdesign och Webbutveckling i Skövde</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
