1.
define("DB_HOST","localhost");
报错。必须把localhost换成127.0.0.1
另外 mysql_connect() 即将弃用。建议用mysqli。
2. 老师在讲logout的时候写下这样一段代码:
function logout(){
$_SESSION=array();
echo $_SESSION;
if(isset($_COOKIE[session_name()])){
echo session_name();
echo "
";
echo $_COOKIE[session_name()];
setcookie(session_name(),"",time()-1);
session_destroy();
//header("location:login.php");
}
}
我觉得很奇怪, 退出登录不是清掉session中的值就可以了?为什么还要扯cookie?
---------------------------转载---------------------------------
原文地址:http://segmentfault.com/a/1190000003012552
可以将 Session 理解为存放我们数据的“箱子”,当然,这些“箱子”都在服务端那。服务器给访问者唯一的“钥匙”,这个“钥匙”被称作 session_id。访问者凭借自己的 session_id,就能获取到自己存在服务器端的数据。
session_id 通过两种方式传给访问者(客户端):URL 或 cookie。详情参见:传送会话ID
Cookie 也是由于 HTTP 无状态的特点而产生的技术。也被用于保存访问者的身份标示和一些数据。每次客户端发起 HTTP 请求时,会将 Cookie 数据加到 HTTP header 中,提交给服务端。这样服务端就可以根据 Cookie 的内容知道访问者的信息了。
可以说,Session 和 Cookie 做着相似的事情,只是 Session 是将数据保存在服务端,通过客户端提交来的 session_id 来获取对应的数据;而 Cookie 是将数据保存在客户端,每次发起请求时将数据提交给服务端的。
上面提到,session_id 可以通过 URL 或 cookie 来传递,由于 URL 的方式比 cookie 的方式更加不安全且使用不方便,所以一般是采用 cookie 来传递 session_id。
服务端生成 session_id,通过 HTTP 报文发送给客户端(比如浏览器),客户端收到后按指示创建保存着 session_id 的 cookie。cookie 是以 key/value 形式保存的,看上去大概就这个样子的:PHPSESSID=e4tqo2ajfbqqia9prm8t83b1f2
。在 PHP 中,保存 session_id 的 cookie 名称默认叫作PHPSESSID
,这个名称可以通过 php.ini 中 session.name
来修改,也可以通过函数 session_name()
来修改。
通过为每个独立用户分配唯一的会话 ID,可以实现针对不同用户分别存储数据的功能。 会话通常被用来在多个页面请求之间保存及共享信息。 一般来说,会话 ID 通过 cookie 的方式发送到浏览器,并且在服务器端也是通过会话 ID 来取回会话中的数据。 如果请求中不包含会话 ID 信息,那么 PHP 就会创建一个新的会话,并为新创建的会话分配新的 ID。
会话的工作流程很简单。当开始一个会话时,PHP 会尝试从请求中查找会话 ID (通常通过会话 cookie), 如果请求中不包含会话 ID 信息,PHP 就会创建一个新的会话。 会话开始之后,PHP 就会将会话中的数据设置到 $_SESSION 变量中。 当 PHP 停止的时候,它会自动读取 $_SESSION 中的内容,并将其进行序列化, 然后发送给会话保存管理器器来进行保存。
---------------------over-------------------------
我以前也转过关于session的文章。当时是要做一个免登录功能,session里面有对应值,就可以免登陆。cookie的作用在我看来就是用来「记住密码」的。当时也知道有个jsession_id这个东西,但是一直都没有正式用过。
照这个说法,每次请求如果包含session_id,那浏览器就会把这个id发到服务器,让服务器根据session_id查找对应数据。我之前写的时候可能就是因为没有清掉这个session_id所以每次重启服务器,第一次访问都会报错!!!
官方文档
http://php.net/manual/zh/function.session-destroy.php
session_destroy() 销毁当前会话中的全部数据, 但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie。 如果需要再次使用会话变量, 必须重新调用 session_start() 函数。
为了彻底销毁会话,比如在用户退出登录的时候,必须同时重置会话 ID。 如果是通过 cookie 方式传送会话 ID 的,那么同时也需要 调用 setcookie() 函数来 删除客户端的会话 cookie。
3. 不懂{}的意思。
function insert($table,$array){
$keys=join(",",array_keys($array));
//echo $keys;
$vals="'".join("','",array_values($array))."'";
//echo $vals;
//insert admin(username,password,email) values('a','0cc175b9c0f1b6a831c399e269772661','a')
$sql="insert {$table}($keys) values({$vals})";
mysql_query($sql);
return mysql_insert_id();
}
{$table}是告诉PHP引擎在解析这个变量的时候当作一个整体去解析,因为PHP引擎在解析变量的时候会尽可能多的去向后取合法字符,它认为取得的合法字符越多,变量的含义越明确,所以我们写的时候最好把变量括成一个整体。
http://blog.csdn.net/yboker/article/details/8536304
如果$cid=aa, 那么{$cid}dd=aadd,而$ciddd=ciddd;
当然,{}的用法不止这些。随便百度就有很多。
另外我觉得那个header()也是非常神奇的存在。
http://blog.csdn.net/yboker/article/details/8174681
header()函数的作用是:发送一个原始 HTTP 标头[Http Header]到客户端。
标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串,在标头
与 HTML 文件之间尚需空一行分隔。有关 HTTP 的详细说明,可以参 RFC 2068 官方文件
(http://www.w3.org/Protocols/rfc2068/rfc2068)。
在 PHP 中送回 HTML 资料前,需先 传完所有的标头。
4. 传值的时候,老师一会儿用request取,一会儿用post取。总体来说,直接接在URL后面的用request,表单还是post。
$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢。通过POST和GET方法提交的所有数据都可以通过$_REQUEST数组获得。
GET表单值可以通过_GET获取;但通过action的url设置的参数总是获取不到的,
5. Notice: Undefined variable: str in /Users/gao/PhpstormProjects/shop/lib/mysql.func.php on line 34
总是出现这种东西很烦。还有各种warning,DEPRECATED.
6.$_SERVER['PHP_SELF'] 表示当前 php 文件相对于网站根目录的位置地址
http://www.5idev.com/p-php_server_php_self.shtml
由于利用 $_SERVER['PHP_SELF'] 可以很方便的获取当前页面地址,因此一些程序员在提交表单数据到当前页面进行处理时,往往喜欢使用如下这种方式: