Skip to content
This repository has been archived by the owner on Jan 31, 2020. It is now read-only.

Zend\Session::AbstractContainer::offsetExists() returning FALSE for key with NULL value #111

Open
nuxwin opened this issue Jun 11, 2018 · 2 comments

Comments

@nuxwin
Copy link

nuxwin commented Jun 11, 2018

@weierophinney @Ocramius

As said in the title, checking if specific offset exists when it is set with NULL value always return FALSE.

// Zend session container
$session = Application::getInstance()->getSession();
$session['key'] = NULL;
if($session->offsetExists('key')) {
        // do something
}

The problem is that current implementation rely on PHP isset() language construct which return FALSE for keys with NULL value. Shouldn't it be preferable to use the PHP array_key_exists() function? What we want there is knonwing if a specific offset exists, whatever it value, right? Else, is there any reliable way to check if a particular key was set, whatever it value and without first having to get an array copy?

Even worse is that trying to unset an offset with NULL value will lead to a NO OP because we return early from Zend\Session::AbstractContainer::offsetUnset() if the offset isn't set in regard of the Zend\Session::AbstractContainer::offsetExists() current implementation:

// Zend session container
$session = Application::getInstance()->getSession();
$session['key'] = NULL;
$session->offsetUnset('key'); NO OP... Key will still be in storage...

Thank you.

@nuxwin nuxwin changed the title Zend\Session::AbstractContainer::offsetExists() returning null for key with NULL value Zend\Session::AbstractContainer::offsetExists() returning FALSE for key with NULL value Jun 11, 2018
@dennybrandes
Copy link
Contributor

I think you are right. There should be a difference between a key is set and key exist. Maybe one can implement another method with name offsetIsSet, which uses isset and change method offsetExists to use array_key_exists.

@weierophinney
Copy link
Member

This repository has been closed and moved to laminas/laminas-session; a new issue has been opened at laminas/laminas-session#5.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants