Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP: Sessiot?

Sivun loppuun

walkout_ [09.10.2021 16:14:31]

#

Mistähän mahtaa johtua, että PHP-funktio luo Google Chromessa 2 sessio-tiedosto jotka ovat tyhjiä ja yhden sellaisen missä on sisältönä sitä mitä pitääkin ja taas jos käytän Mozila Firefoxia niin se tekee vain yhden sessiotiedoston kuten Chormenkin pitäisi tehdä. Tämän takia sovellukseni ei toimi ollekaan Chromessa.

Tässä vähän kooodia:

$configSessions = new Zend_Config_Ini(APPLICATION_PATH . '/configs/sessions.ini', APPLICATION_ENV);

Zend_Session::setOptions($configSessions->toArray());

Zend_Session::start();

Ja toinen koodi:

if (!Zend_Session::namespaceGet(str_replace(array('https://', '.atlassian.net'), array('', ''), $request->getParam('xdm_e')).'-customer')) {
			$customer = new Zend_Session_Namespace(str_replace(array('https://', '.atlassian.net'), array('', ''), $request->getParam('xdm_e')).'-customer');
			$customer->domain = str_replace('https://', '', $request->getParam('xdm_e'));
		} else {

		}

		$instance = new Zend_Session_Namespace('instance');
		$instance->instance = str_replace(array('https://', '.atlassian.net'), array('', ''), $request->getParam('xdm_e'));

vesikuusi [09.10.2021 19:39:12]

#

Jos tarkastelet Chromen kehittäjätyökaluissa keksin tietoja, mitä tietoja näet tästä duplikaattikeksistä? Olisiko mahdollisesti cookie path eri samannimisillä kekseillä?

Tai mitä tietoja nyt ylipäätään siellä näkyy näistä kekseistä? Ymmärsin kysymyksen niin, että Chromessa tulee useampi samanniminen keksi.

walkout_ [09.10.2021 20:34:24]

#

Ohjelmistoni toimi kyllä Chromessa aiemmin ihan samalla lähdekoodilla kuin nytkin, mutta ilmeisesti Chromen uusimmassa versioissa on muutettu jotain niin, että homma ei enää toimi.

Myöskään homma ei toimi MS Edgessä ja Google Chromessa jos php.ini asetukset eivät ole näin kuin alla:

session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite =

Koska kyseiset selaimet eivät hyväksy keksejä, joissa ei ole flagejä HttpOnly ja Secure ja SameSite:None

Metabolix [10.10.2021 15:32:35]

#

Tuo on taas ihan uskomaton koodi. Muuttujat on keksitty, miksi pitää toistaa sama str_replace noin monta kertaa?

Kuten vesikuusi ehdotti, katso kehittäjätyökaluista keksien tiedot. Eli avaa Application-välilehti ja sieltä Cookies ja oikea domain. Sieltä pystyt katsomaan, onko jotain evästeitä asetettu väärillä parametreilla.

Jos tuolta ei löydy riittävää tietoa, katso suoraan pyynnöistä, miten evästeet asetetaan. Eli avaa Network-välilehti ja käske säilyttää pyynnöt (Preserve log), tyhjennä selaimen vanhat tiedot ja avaa sivu. Käy läpi tulleet pyynnöt listasta, etsi kaikki Set-Cookie-rivit ja tarkista niistä evästeiden tiedot. Tarkista myös, että kaikki pyynnöt menevät oikeaan domainiin ja HTTPS:llä, koska tuossa koodissasi ilmeisesti http://-osoite tuottaisi väärän tuloksen ja myös väärä domain tuottaisi eri tuloksen.

walkout_ [10.10.2021 18:26:42]

#

Noniin,

Ohjelma tekee kaksi AJAX-kutsua index (joka lataa Jiran issuet) ja loadprojects (joka lataa Jiran projectit) ja molemmissa on evästeen nimi PHPSESID mutta niissä on eri value. Polku molemmissa on / ja domain sama.

Metabolix [10.10.2021 20:36:28]

#

Onko mahdollista, että nämä AJAX-kutsut tehdään samaan aikaan (ei peräkkäin), jolloin siis ensimmäisen kutsun palauttamaa evästettä ei ole vielä tallennettu, ennen kuin toinen lähtee? Pitäisikö AJAX-kutsuissa jo alunperin olla jokin sivun yhteinen eväste mukana?

walkout_ [10.10.2021 21:07:10]

#

Varmaankin asia on näin sillä kaikkissa AJAX-kutsuissa on sama value kun käyttää Mozilla Firefoxia.

Koitan kokeilla niin, että laitan issueiden AJAX-kutsun käyttnistymään vasta kuin projekteien AJAX-kutsu on ladattu kokonaan. Josko tämä korjaisi ongelman.

walkout_ [11.10.2021 07:44:12]

#

Homma ei auttanut vaikka tein koodin muutoksen näin, että vasta kun Projekti Combo on ladattu ohjelma lataa vasta sitten issuet:

projectsCombo.getStore().on('load', function(store, records, options){

			if (Ext.getCmp('myworklogstoggle').pressed) {
	    		mytimesheetstore.load({params: { month: <?php echo $month; ?>, year: <?php echo $year; ?>, project: projectsCombo.getValue(), worklogsauthor: fullname, worklogs: Ext.getCmp('worklogstoggle').pressed, status: statusCombo.getValue() }});
	    	} else {
	    		mytimesheetstore.load({params: { month: <?php echo $month; ?>, year: <?php echo $year; ?>, project: projectsCombo.getValue(), worklogsauthor: 'null', worklogs: Ext.getCmp('worklogstoggle').pressed, status: statusCombo.getValue() }});
	        }

});

Ja jos laitan näin:

/*
if (Ext.getCmp('myworklogstoggle').pressed) {
	    		mytimesheetstore.load({params: { month: <?php echo $month; ?>, year: <?php echo $year; ?>, project: projectsCombo.getValue(), worklogsauthor: fullname, worklogs: Ext.getCmp('worklogstoggle').pressed, status: statusCombo.getValue() }});
	    	} else {
	    		mytimesheetstore.load({params: { month: <?php echo $month; ?>, year: <?php echo $year; ?>, project: projectsCombo.getValue(), worklogsauthor: 'null', worklogs: Ext.getCmp('worklogstoggle').pressed, status: statusCombo.getValue() }});
	        }
*/

Niin kun se lataa pelkät projektit niin tulee kaksi sessio tiedostoa eri sessio ID:llä joista toinen on tyhjä sisällöltään.

walkout_ [11.10.2021 15:08:32]

#

Luulempa ettei Google Chrome ja/tai MS Edge huomma tätä $request->getParam('xdm_e'); ensimmäisellä pageloadilla ja tekee tämän kaksi kertaa jostain syystä.

Ja ei SSL VitualHostissa on tällainen konfirguraatio:

#– rewrite the standard page to the ssl page
<IfModule mod_rewrite.c>
RewriteEngine on

####
# Redirect only access to repo and Polarion to the
# SSL port. The other stuff is not sensitive and can
# remain on the old port.
####

RewriteRule (.*) https://%{HTTP_HOST} [NC,L]
</IfModule>

Mutta kuitenkin Jira Cloudussa on annettu sille vain https:// osoite.

carabia [11.10.2021 15:32:26]

#

reuna ja kromi on nykysin samaa paskaa

muuskanuikku [11.10.2021 17:04:48]

#

walkout_ kirjoitti:

Luulempa ettei Google Chrome ja/tai MS Edge huomma tätä $request->getParam('xdm_e'); ensimmäisellä pageloadilla ja tekee tämän kaksi kertaa jostain syystä.

Kyllä se ongelma on ihan se perinteinen eli että sinun koodisi on puhdasta paskaa. Et ymmärrä rinnakkaislaskennnasta yhtään mitään ja siksi kärsit tällaisista "race conditioneiksi" kutsutuista ongelmista.

Sinun täytyy nyt varmistaa, että se evästeen alun perin asettava HTTP-pyyntö suoritetaan yksinään ensin ja vasta sen jälkeen voidaan sallia muiden HTTP-pyyntöjen tekeminen.

Aiemmista viesteistäsi ei selviä, miksi sattumanvaraiset HTTP-pyynnöt ylipäätään availevat sessioita. Kaiken järjen mukaan vain ns. login-pyynnön pitäisi luoda sessio ja muut HTTP-pyynnöt ainoastaan käyttävät olemassa olevaa sessiota tai johtavat virheeseen, jos sessiota ei ole olemassa.

Valitettavasti tämä johtaa siihen päätelmään, ettet ymmärrä session hallinnastakaan yhtään mitään ja että olet siksi päättänyt pyöräyttää lottokonetta, ja jumalaisen tuurin ansiosta sen on toiminut tähän asti.

Mainitsit myös, että cookieisiin liittyvien asetusten pitää olla "tietyllä tavalla", jotta ne toimisivat Chromessa ja Edgessä. Tämä ongelma on luultavasti täysin erillinen ongelma ja johtuu siitä, että selaimet ovat kiristämässä virheellisten ja "epäturvallisten" evästeasetusten tulkitsemista.

walkout_ [13.10.2021 09:58:04]

#

muuskanuikku kirjoitti:

(11.10.2021 17:04:48): ”– –” Kyllä se ongelma on ihan se perinteinen eli...

Ok. Yrittetään.

Mutta evästeet eivät toimi Edge ja Chrome-selaimisssa Cross-Sitetenä, jos ei niiden asetuksissa ole HttpOnly ja Secure, eivätkä ole milloinkaan toimineet vaikka evästeet olisivat miten turvallisia tahansa. Ja sama asia tulee tulevaiduuessa muuttumaan myös Firefoxissa.

walkout_ [22.10.2021 17:21:20]

#

Sain homman toimaan lisäämäällä rivit:

session_set_cookie_params(['samesite' => 'None']);

Ja tässä lopputulos miten Appsini toimii:

https://www.youtube.com/watch?v=ROiYhRt_UQg


Sivun alkuun

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta