PHP的SESSION无法保存


The SESSION of PHP can not save?

不同的web浏览器,不同的平台不能共享同一个字符串变量,它从null开始
我想要一个类似聊天室的功能

note.php

<?php
session_start();
$_SESSION['note']=$_POST['text'].'<br>'.$_SESSION['note'];
?>
<html>
<body>
<title>Note</title>
<form method="post" action="note.php" name=form1>
<input type="text" name="text" size=150 required>
<input type="submit" value="submit" name="B1">
<input type="reset" value="reset" name="B2">
</form>
<?php
echo $_SESSION['note'];
?>
</body>
</html>

使用文件方法可以保存变量。

<html>
<body>
<title>NoteF</title>
<form method="post" action="notef.php" name=form1>
<input type="text" name="text" size=100>
<input type="submit" value="submit" name="B1">
<input type="reset" value="cancel" name="B2">
</form>
<?php
$file='notes.txt';
$fr='';
if(file_exists($file)){
 $fr=file_get_contents($file);
}
if($_POST['text']==''){
 echo $fr;
}else{
 $fw=$_POST['text'].'<br>'.$fr;
 $myfile = fopen($file, "w") or die("Unable to open file!");
 fwrite($myfile, $fw);
 fclose($myfile);
 echo $fw;
}
?>
</body>
</html>

但服务器(新浪网)不允许:fopen(notes.txt)[function.fopen]:无法打开流:权限被拒绝
但新浪网提供内存缓存来保存临时变量,20MB以下免费。

<html>
<body>
<title>NoteMemCache</title>
<form method="post" action="notemc.php" name=form1>
<input type="text" name="text" size=100>
<input type="submit" value="提交" name="B1">
<input type="reset" value="取消" name="B2">
</form>
<?php
$mmc = memcache_connect();
$notes='';
if ($mmc == false) {
 echo "mc init failed'n";
} else {
 $notes=memcache_get($mmc, "notes");
 if($_POST['text']==''){
  echo $notes;
 }else{
  $newnotes=$_POST['text'].'<br>'.$notes;
  echo  $newnotes;
  memcache_set($mmc, "notes", $newnotes);
 }
} 
?>
</body>
</html>

演示:http://sonichy.sinaapp.com/notemc.php

会话的工作方式是,在服务器的响应中有一个作为cookie发送的会话id。然后,浏览器存储该id,并在每次后续请求时将该信息发送回服务器。如果您使用另一个浏览器,甚至使用具有不同配置文件的同一浏览器,则会话id将不同。

服务器使用该会话id来查找为该请求存储的所有会话变量。如果你想在多个浏览器之间共享数据,那么你必须将这些信息存储在某种形式的永久存储中(文件或数据库)。

您还需要一些唯一的标识符来链接这两个浏览器。类似于帐户id(在注册和身份验证后授予)。

作为一个基本示例,假设您有一个mysql数据库,其中有一个这样的表:

id|chat_id|备注
1|1|你好
2|1|再见

然后,如果你的url是note.php?chat_id=1,那么你可以使用$chatId = $_GET['chat_id']从url中获取chat_id,并在数据库中查询所有带有chat_id的笔记。然后,任何浏览器都可以访问该url,他们都会看到相同的内容。

在开发这个之前,您需要获得php的更基本的知识。。。在你深入研究之前,我会找到一个教程。

以下是您需要的

session_start();
if(isset($_POST['text']))
    {
    $_SESSION['note']=$_POST['text'].'<br>'.$_SESSION['note'];
    }

但是,会话ID在不同的浏览器上会有所不同

这可以使用session_id()函数完成,但非常不安全,因为恶意用户可以生成随机会话id并劫持会话。您最好将这些信息存储在数据库中,并创建一个API来与您的应用程序交互。

一个更新的更前沿的方法是使用angularJS和socket.io。这将成为一个完美的聊天室应用程序。