Slette sessions med prefix

kongen

kongemedlem
Hvordan kan jeg slette alle session som har et spesifikt prefiks i session-navnet?

Hvis en bruker har fått satt 40 tusen sessions, men når han besøker en spesiell side så skal alle sessions som starter på "bolle" bli slettet, hvordan kan jeg gjøre det? Alle andre sessions skal fortsatt være satt.
 

kongen

kongemedlem
Takk, jeg skal prøve denne :)

Vil denne slette alle sessions som har "bolle" i seg, eller bare de som starter med bolle? Vil f.eks. session "fiskebolle" bli slettet?
 

xdex

Medlem
Jeg som tenkte feil ved og overskrive hvert array element, haha, her:

PHP:
<?php

$array['item1'] = 'BolleMedRosiner';
$array['item2'] = 'BolleUtenRosiner';
$array['item3'] = 'Bollemus';
$array['item4'] = 'Morsombolle';

foreach ($array as $key => $value) {
    if (strpos($value, 'Bolle') === 0) {
        unset($array[$key]);
    }
}

print_r($array);

// Output

Array
(
    [item4] => Morsombolle
)

PHP code - 14 lines - codepad

Tip,
Session elements er array.
 
Sist redigert:

kongen

kongemedlem
Takk :) Da må jeg prøve denne.

Hva hvis jeg ville slette alle sessions som slutter med bolle, hvordan ville det se ut da?
 

xdex

Medlem
Egentlig det samme, bare tell hvor du ønsker at strpos skal begynne. da f.eks ved å sette -5, fordi bolle er 5 bokstaver.

eksempel,

PHP:
$array['item1'] = 'RosinerIBolle'; 
$array['item2'] = 'KoseBolle'; 
$array['item3'] = 'SmurfBolle'; 
$array['item4'] = 'SkoleBolle'; 
$array['item5'] = 'SmurfBolle'; 
$array['item6'] = 'BolleNam'; 
$array['item7'] = 'SmurfBolle'; 
$array['item8'] = 'Sjokolade'; 
$array['item9'] = '3313131313Bolle'; 

foreach ($array as $key => $value) { 
    if (strpos($value, 'Bolle', strlen($value)-5) == true) { 
        unset($array[$key]); 
    } 
} 

print_r($array); 

// Output

Array
(
    [item6] => BolleNam
    [item8] => Sjokolade
)

Kan også være lurt og legge inn en sjekk, for å sjekke om ordet faktisk er langt nok, slik at du ikke får noe feilmelding.

PHP:
$array['item1'] = 'RosinerIBolle'; 
$array['item2'] = 'KoseBolle'; 
$array['item3'] = 'SmurfBolle'; 
$array['item4'] = 'SkoleBolle'; 
$array['item5'] = 'SmurfBolle'; 
$array['item6'] = 'BolleNam'; 
$array['item7'] = 'SmurfBolle'; 
$array['item8'] = 'Sjokolade'; 
$array['item9'] = '3313131313Bolle';
$array['item10'] = '2';

foreach ($array as $key => $value) {
	if(strlen($value) > 5)
	{
		if (strpos($value, 'Bolle', strlen($value)-5) == true) { 
			unset($array[$key]); 
		}
	}
} 

print_r($array);

Klapp sammen alt i to funksjoner (du kan selv tenke ut forbedringer)

PHP:
$array[] = 'Bollemus';
$array[] = 'DiggBolle';

function check_prefix($array,$prefix)
{

	$prefix_length = strlen($prefix);

	foreach ($array as $key => $value) { 
		if(strlen($value) > $prefix_length)
		{
		
			if (strpos($value, $prefix) === 0) { 
				unset($array[$key]); 
			}
		}
	}
	
	return $array;

}

function check_endfix($array,$prefix)
{

	$prefix_length = strlen($prefix);

	foreach ($array as $key => $value) { 
		if(strlen($value) > $prefix_length) 
		{
		
			if (strpos($value, $prefix, strlen($value)-$prefix_length) == true) {  
				unset($array[$key]);  
			} 
		} 
	}  
	
	return $array;

}

print_r(check_endfix($array,'Bolle'));
 
Sist redigert:

kongen

kongemedlem
Takk takk :)

Nå blir antall kodelinjer mindre når jeg slipper å slette hver session enkeltvis.
 

kongen

kongemedlem
Hva hvis session slutter på et nummer som har uspesifisert antall tegn?

bolle1
bolle2
bolle3
...
bolle14
bolle15
bolle16
...
bolle2067
bolle2068
bolle2067
 

kongen

kongemedlem
Hvorfor får jeg "Warning: Invalid argument supplied for foreach()" på denne koden?

http://codepad.org/Ngr8Jg8f

Kode:
$_SESSION['bolle1'] = 'Per';
$_SESSION['bolle2'] = 'Pål';
$_SESSION['bolle3'] = 'Espen';
$_SESSION['bolle4'] = 'Daskeladd';
$_SESSION['ingenbolle1'] = 'Troll';
$_SESSION['ingenbolle2'] = 'Bukkene bruse';

foreach ($array as $key => $value) {
    if (strpos($key , 'bolle') === 0) {
        unset($array[$key]);
    }
}

print_r($array);

// Output

Warning: Invalid argument supplied for foreach()
 
Topp