Inhaltsverzeichnis
回复讨论(解决方案)
Heim Backend-Entwicklung PHP-Tutorial SESSION中的数组为什么有时候取得到,有时候取不到呢?

SESSION中的数组为什么有时候取得到,有时候取不到呢?

Jun 23, 2016 pm 01:55 PM
session 数组

登录后:将用户对象user放入SESSIOn中 这样访问 $_SESSION['user']['priv']。有时候这个为空,需要将
$user=$_SESSION['user']; 后再访问,有时候直接$_SESSION['user']['priv']这样访问才可以,请问这是咋回事?
我的php版本 5.4.22


回复讨论(解决方案)

有时候直接$_SESSION['user']['priv']这样访问就可以,不需要将数组提出来($user=$_SESSION['user']),请问这是咋回事?
我的php版本 5.4.22

在取失败时:var_dump($_SESSION['user']);看看数据,结果是正确的。里面有数据。分开成2步,也可以取到,就是在前面取不到。同方法内,第一次不能这样取。第二次就可以这样取到了。session数据是没有变的。

你最好给出测试代码

至少也要给出 失败时 var_dump($_SESSION['user']); 的结果

测试代码 不能重现。测试都是正常的。实际就要分2步。

先排除个外因,会不会是你测试输出$_SESSION['user']['priv']的时候恰好第一次访问还没来的及设置session?
不能重现咋测试解决

你就没怀疑过你代码写错了么!

$_SESSION['user']['priv'] = '' ; //priv赋值为空,谁取它都是空!
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

$_SESSION 生命周期 默认时间为20分钟

明显 超过时间了

有?可以,有?不行,????log,??每次的情?,??方便debug。

在取失败时:var_dump($_SESSION['user']);看看数据,结果是正确的。里面有数据。分开成2步,也可以取到,就是在前面取不到。同方法内,第一次不能这样取。第二次就可以这样取到了。session数据是没有变的。
----------
各位难道没有写过程序么?这样的问题没有碰到过么?我碰到好多次。

先排除个外因,会不会是你测试输出$_SESSION['user']['priv']的时候恰好第一次访问还没来的及设置session?
不能重现咋测试解决


亲,问题永远在这儿,就是要分2步。一步不行。我讲的测试不能重现,就是写个test.php不能重现。
实际程序不分二步。结果就不正确。很稳定。
----------------
我在其它地方发贴。还有网上很我和我一样的问题的。

有?可以,有?不行,????log,??每次的情?,??方便debug。


-----------------
可以就可以,不可以就不要以,没有时行时不行的。
我上面分三贴讲清楚了。只看一贴是不行的。

第一次var_dump($_SESSION['user']);是否有值? 建议贴出代码以供分析。

你就没怀疑过你代码写错了么!

$_SESSION['user']['priv'] = '' ; //priv赋值为空,谁取它都是空!
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren


写了近10年程序。工作13+,做老大很多年,哪敢犯程序写错的上毛病,还有脸出来见人,直接撞死得了?
因为奇怪。所以发上来。

不能重?,你的??代???行代?不同,你不提供代?如何分析?

你加log,?次?取?,都?出
var_dump($_SESSION['user']);
var_dump($_SESSION['user']['priv']);
方便找??。

各位要看代码,这就是真正代码:

//user为从数据库里取出来的用户对象$user=$_SESSION['user'];echo $user['priv'] ;正常显示: 100// echo $_SESSION['user']['priv'];//显示为空。原来是这行,改成上面2行了。
Nach dem Login kopieren

楼主的意思是,第二次以后的访问,无论哪种方式都没问题,而第一次访问,直接读二维必然出事,而分开读正常,不知道我理解的对不对...

楼主的意思是,第二次以后的访问,无论哪种方式都没问题,而第一次访问,直接读二维必然出事,而分开读正常,不知道我理解的对不对...


不对。直接看15楼,不理其它意思。

乱码造成的吧?

乱码造成的吧?

没乱码。

print_r($_SESSION['user']);
这样同时可以得到数据结构信息,才好做判断的依据
由于你不能再现错误,只有在对 $_SESSION 赋值的代码中找原因

极有可能是 从数据库里取出来的用户对象有时是数组,有时是对象


你就没怀疑过你代码写错了么!

$_SESSION['user']['priv'] = '' ; //priv赋值为空,谁取它都是空!
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren


写了近10年程序。工作13+,做老大很多年,哪敢犯程序写错的上毛病,还有脸出来见人,直接撞死得了?
因为奇怪。所以发上来。


开发windows系统的 看来没你水平高啊! windows到现在还在打补丁呢,有漏洞就是代码没写好哈~~~! 你的都正确

print_r($_SESSION['user']);
这样同时可以得到数据结构信息,才好做判断的依据
由于你不能再现错误,只有在对 $_SESSION 赋值的代码中找原因

极有可能是 从数据库里取出来的用户对象有时是数组,有时是对象



其实我觉得就是在session赋值时出现的问题!

这是thinkphp中session函数读取session的代码:

            if (strpos($name, '.')) {                list($name1, $name2) = explode('.', $name);                return isset($_SESSION[$prefix][$name1][$name2]) ? $_SESSION[$prefix][$name1][$name2] : null;            } else {                return isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null;            }
Nach dem Login kopieren


如果session真的有BUG我想TP的用户早就反应了,他读取任何session都是直接读二维的
我建议楼主先在业务逻辑和session赋值上面找找原因
另外你说有和你一样问题的,不知道方便发些链接不

检查从数据库取出的数据是否异常

貌似没说清楚问题,也没找到原因。

分成2步就没有问题了,没有心思再管这些。结贴了。谢谢各位支持。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie entferne ich doppelte Elemente mithilfe einer foreach-Schleife aus einem PHP-Array? Wie entferne ich doppelte Elemente mithilfe einer foreach-Schleife aus einem PHP-Array? Apr 27, 2024 am 11:33 AM

Die Methode zur Verwendung einer foreach-Schleife zum Entfernen doppelter Elemente aus einem PHP-Array ist wie folgt: Durchlaufen Sie das Array und löschen Sie es, wenn das Element bereits vorhanden ist und die aktuelle Position nicht das erste Vorkommen ist. Wenn beispielsweise in den Datenbankabfrageergebnissen doppelte Datensätze vorhanden sind, können Sie diese Methode verwenden, um diese zu entfernen und Ergebnisse ohne doppelte Datensätze zu erhalten.

Die Kunst des PHP Array Deep Copy: Mit verschiedenen Methoden eine perfekte Kopie erzielen Die Kunst des PHP Array Deep Copy: Mit verschiedenen Methoden eine perfekte Kopie erzielen May 01, 2024 pm 12:30 PM

Zu den Methoden zum tiefen Kopieren von Arrays in PHP gehören: JSON-Kodierung und -Dekodierung mit json_decode und json_encode. Verwenden Sie array_map und clone, um tiefe Kopien von Schlüsseln und Werten zu erstellen. Verwenden Sie Serialize und Deserialize für die Serialisierung und Deserialisierung.

PHP-Array-Schlüsselwertumdrehen: Vergleichende Leistungsanalyse verschiedener Methoden PHP-Array-Schlüsselwertumdrehen: Vergleichende Leistungsanalyse verschiedener Methoden May 03, 2024 pm 09:03 PM

Der Leistungsvergleich der PHP-Methoden zum Umdrehen von Array-Schlüsselwerten zeigt, dass die Funktion array_flip() in großen Arrays (mehr als 1 Million Elemente) eine bessere Leistung als die for-Schleife erbringt und weniger Zeit benötigt. Die for-Schleifenmethode zum manuellen Umdrehen von Schlüsselwerten dauert relativ lange.

Best Practices für Deep Copying von PHP-Arrays: Entdecken Sie effiziente Methoden Best Practices für Deep Copying von PHP-Arrays: Entdecken Sie effiziente Methoden Apr 30, 2024 pm 03:42 PM

Die beste Vorgehensweise zum Durchführen einer Array-Deep-Kopie in PHP besteht darin, json_decode(json_encode($arr)) zu verwenden, um das Array in einen JSON-String zu konvertieren und ihn dann wieder in ein Array umzuwandeln. Verwenden Sie unserialize(serialize($arr)), um das Array in eine Zeichenfolge zu serialisieren und es dann in ein neues Array zu deserialisieren. Verwenden Sie den RecursiveIteratorIterator, um mehrdimensionale Arrays rekursiv zu durchlaufen.

Anwendung der PHP-Array-Gruppierungsfunktion bei der Datensortierung Anwendung der PHP-Array-Gruppierungsfunktion bei der Datensortierung May 04, 2024 pm 01:03 PM

Die PHP-Funktion array_group_by kann Elemente in einem Array basierend auf Schlüsseln oder Abschlussfunktionen gruppieren und ein assoziatives Array zurückgeben, wobei der Schlüssel der Gruppenname und der Wert ein Array von Elementen ist, die zur Gruppe gehören.

Praxis der mehrdimensionalen Sortierung von PHP-Arrays: von einfachen bis hin zu komplexen Szenarien Praxis der mehrdimensionalen Sortierung von PHP-Arrays: von einfachen bis hin zu komplexen Szenarien Apr 29, 2024 pm 09:12 PM

Die mehrdimensionale Array-Sortierung kann in Einzelspaltensortierung und verschachtelte Sortierung unterteilt werden. Bei der Einzelspaltensortierung kann die Funktion array_multisort() zum Sortieren nach Spalten verwendet werden. Bei der verschachtelten Sortierung ist eine rekursive Funktion erforderlich, um das Array zu durchlaufen und zu sortieren. Zu den praktischen Beispielen gehören die Sortierung nach Produktname und die Sortierung von Verbindungen nach Verkaufsmenge und Preis.

Die Rolle der PHP-Array-Gruppierungsfunktion beim Auffinden doppelter Elemente Die Rolle der PHP-Array-Gruppierungsfunktion beim Auffinden doppelter Elemente May 05, 2024 am 09:21 AM

Mit der Funktion array_group() von PHP kann ein Array nach einem angegebenen Schlüssel gruppiert werden, um doppelte Elemente zu finden. Diese Funktion durchläuft die folgenden Schritte: Verwenden Sie key_callback, um den Gruppierungsschlüssel anzugeben. Verwenden Sie optional value_callback, um Gruppierungswerte zu bestimmen. Zählen Sie gruppierte Elemente und identifizieren Sie Duplikate. Daher ist die Funktion array_group() sehr nützlich, um doppelte Elemente zu finden und zu verarbeiten.

So sortieren Sie Werte in einem Array in PHP nach Größe So sortieren Sie Werte in einem Array in PHP nach Größe Mar 22, 2024 pm 05:24 PM

PHP ist eine häufig verwendete serverseitige Skriptsprache, die in den Bereichen Website-Entwicklung und Datenverarbeitung weit verbreitet ist. In PHP ist es eine sehr häufige Anforderung, die Werte in einem Array nach Größe zu sortieren. Mithilfe der integrierten Sortierfunktion können Sie Arrays ganz einfach sortieren. Im Folgenden wird anhand spezifischer Codebeispiele erläutert, wie Sie mit PHP die Werte in einem Array nach Größe sortieren: 1. Sortieren Sie die Werte im Array in aufsteigender Reihenfolge:

See all articles