Archief - PHP: Cookies werken niet in IE/Opera

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Ryzer

Legacy Member
Hallo,

Ik heb een class geschreven voor een login systeem in m'n script. Deze maakt gebruik van Cookies. Alles werkte perfect, tot ik nu ineens nog eens in IE test, en hierin werkt het dus niet. Volgens een kameraad heeft Opera ook problemen. Het zit namelijk zo, dat als ik inlog via m'n class, hij zegt "logged in" maar uiteindelijk toch terug de "please log in" pagina toont.

EDIT: code fixed, lees reply hieronder aub

PHP:
class cl_login {
	var $record;

	function cl_login() {
		global $DB;
		$this->record=$DB->query_first("SELECT * FROM {PREFIX}_users WHERE username='".addslashes($_COOKIE['login']['username'])."' AND password='".$_COOKIE['login']['password']."' LIMIT 1;");
		if(!isset($this->record['uid'])) {
			unset($this->record);
		}
	}
	
	function login($username, $password) {
		global $DB;
		$this->record=$DB->query_first("SELECT * FROM {PREFIX}_users WHERE username='".addslashes($username)."' AND password='".md5($password)."' LIMIT 1;");
		if (isset($this->record['username'])) {
			if (!headers_sent()) {
				setcookie("username", $username);
				setcookie("password", md5($password));
				return 1;
			}else{
				unset($this->record);
				return 0;
			}
		}else{
			unset($this->record);
			return 0;
		}
	}
	
	function logout() {
		if (!headers_sent()) {
			setcookie("username", "", time()-3600);
			setcookie("password", "", time()-3600);
			unset($this->record);
			return 1;
		}else{
			return 0;
		}
	}
	
	function is_logged() {
		if(!isset($_COOKIE['username']) || !isset($_COOKIE['password'])) {
			return 0;
		}else{
			if ($this->record['username'] == $_COOKIE['username'] && $this->record['password'] == $_COOKIE['password']) {
				return 1;
			}else{
				return 0;
			}
		}
	}
}

Er scheelt dus iets met het plaatsen van de cookies blijkbaar. Ik heb al geprobeerd of de plaats waar "setcookie()" aangeroepen wordt degelijk bereikt wordt, en dit is het geval. Verder heb ik ook geprobeerd de argumenten "expire", "path" en "domain" mee te geven aan de setcookie() functie, maar helaas zonder resultaat.

Weet iemand wat er mis is?

Mvg,
Ryzer

Ryzer

Legacy Member
Ok bovenstaande code bevat enkele typefoutjes tijdens een poging om te verbeteren. Na het verbeteren werkte het tot nu toe.

Wat ik veranderd heb:
Ik gebruikte eerst $_COOKIE['login']['username'];
Ik werkte dus met arrays. Dit bleek niet te werken in IE of Opera maar alleen in Firefox.
Ik maak nu gebruik van cookies zonder array, en dit blijft wel te werken.

Nog iemand ervaring met cookie-arrays in IE?

dJeez

Legacy Member
De PHP functies serialize en unserialize zijn wellicht de oplossing voor je probleem, als je ze tenminste correct gebruikt. Daarnaast kan het correcte pad en domein voor de cookie opgeven ook wel helpen (4e en 5e parameter van setcookie).

Ryzer

Legacy Member
Deze parameters heb ik ook geprobeerd :) Ik zal eens kijken naar de manua lvan (un)serialize.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan