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赋值为空,谁取它都是空!
$_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赋值为空,谁取它都是空!
写了近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行了。
楼主的意思是,第二次以后的访问,无论哪种方式都没问题,而第一次访问,直接读二维必然出事,而分开读正常,不知道我理解的对不对...
楼主的意思是,第二次以后的访问,无论哪种方式都没问题,而第一次访问,直接读二维必然出事,而分开读正常,不知道我理解的对不对...
不对。直接看15楼,不理其它意思。
乱码造成的吧?
乱码造成的吧?
没乱码。 print_r($_SESSION['user']);
这样同时可以得到数据结构信息,才好做判断的依据
由于你不能再现错误,只有在对 $_SESSION 赋值的代码中找原因
极有可能是 从数据库里取出来的用户对象有时是数组,有时是对象
你就没怀疑过你代码写错了么!
$_SESSION['user']['priv'] = '' ; //priv赋值为空,谁取它都是空!
写了近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; }
如果session真的有BUG我想TP的用户早就反应了,他读取任何session都是直接读二维的
我建议楼主先在业务逻辑和session赋值上面找找原因
另外你说有和你一样问题的,不知道方便发些链接不
检查从数据库取出的数据是否异常
貌似没说清楚问题,也没找到原因。
分成2步就没有问题了,没有心思再管这些。结贴了。谢谢各位支持。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





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.

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.

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.

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.

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.

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.

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.

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:
