WEB中对话跟踪[转]

今日夕失去华工参加睿智融科的笔试,问到web会说话跟踪,一脸懵比,这个词听都未曾听罢,回来后百度过下,发现实际会讲话跟踪的情节己为主还打听的~_~

来源:转载

 MySQL的工作支持非是绑定以MySQL服务器本身,而是同仓储引擎相关1.MyISAM:不支持工作,用于只念程序提高性能
2.InnoDB:支持ACID事务、行级锁、并发 3.Berkeley DB:支持工作

 

 一个事务是一个连连的等同组数据库操作,就接近她是一个单一的做事单元进行。换言之,永远不见面是总体的政工,除非该组内的每个独立的操作是成之。如果以事情之旁操作失败,则通工作将砸。

骨子里,会俱乐部许多SQL查询及一个组中,将实行有的人数还一头当工作之等同有些。

工作的特点: 
作业有以下四单正经属性的缩写ACID,通常给名:

原子性:
确保工作单元内之兼具操作都成功完成,否则事务将让中止在故障点,和以前的操作以回滚到先的状态。

一致性:
确保数据库是的地改变状态后,成功交付的事体。

隔离性: 使事务操作彼此独立的同透亮底。

持久性: 确保提交的业务之结果还是效益的体系出现故障的状态下依然是。

以MySQL中,事务开始运用COMMIT或ROLLBACK语词开始工作同得了。开始跟得了语句的SQL命令中形成了大气之事务。

COMMIT & ROLLBACK: 
立马简单独至关重要字提交和回滚主要用来MySQL的事体。

当一个遂之工作完成后,发出COMMIT命令应要拥有参与表的改才会立竿见影。

假使产生故障时,应发一个ROLLBACK命令归来的事体中援的每一个表到以前的状态。

得操纵的事情行为称为AUTOCOMMIT设置会话变量。如果AUTOCOMMIT设置也1(默认值),然后每一个SQL语句(在事情也)被当是一个完好无缺的作业,并承诺于默认情况下,当其好。
AUTOCOMMIT设置也0时,发出SET AUTOCOMMIT
=0命令,在随着的如出一辙雨后春笋语句子之来意就比如一个工作,直到一个肯定的COMMIT语句时,没有运动之交付。

足由此行使mysql_query()函数在PHP中施行这些SQL命令。

通用事务例子 
立同多样事件是单身于所祭的编程语言,可以起在另外利用的言语来创造应用程序的逻辑路径。
可透过采用mysql_query()函数在PHP中执行这些SQL命令。

BEGIN WORK开始工作有SQL命令

来一个还是多独SQL命令,如SELECT,INSERT,UPDATE或DELETE

自我批评是不是发生其他错误,一切还根据的需。

倘出另外错误,那么问题ROLLBACK命令,否则有COMMIT命令。

每当MySQL中的作业安全表类型:

若果打算利用MySQL事务编程,那么即便用一致栽特殊的法创建表。有成百上千支撑工作但极致盛行的凡InnoDB表类型。

打源代码编译MySQL时,InnoDB表支持用一定的编译参数。如果MySQL版本没有InnoDB支持,请互联网服务提供商建立一个版的MySQL支持InnoDB表类型,或者下载并设置Windows或Linux/UNIX的MySQL-Max二进制分发及动的表类型在出条件受到。
比方MySQL安装支撑InnoDB表,只待补充加一个之TYPE=InnoDB
定义表创建语句。例如,下面的代码创建InnoDB表tcount_tbl:

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
    -> (
    -> tutorial_author varchar(40) NOT NULL,
    -> tutorial_count  INT
    -> ) TYPE=InnoDB;
Query OK, 0 rows affected (0.05 sec)

可以应用其他GEMINI或BDB表类型,但其在你的设置,如果它们支持这有限种类型。

由于品种规划里,牵扯到了金的变换,于是将以MYSQL的事务处理,来担保平等组处理结果的不易。用了政工,就不可避免的要牺牲局部进度,来保证数据的正确。
只生InnoDB支持工作

事务 ACID
Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

1、事务之原子性
一样组工作,要么成功;要么撤回。

2、稳定性
起黑数据(外键约束之类),事务撤回。

3、隔离性
政工独立运转。
一个事务处理后底结果,影响了任何作业,那么其它事务会撤回。
事情之100%隔离,需要牺牲速度。

4、可靠性
薄弱、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。
可靠性与赛快不可兼得, innodb_flush_log_at_trx_commit选项
决定什么时吧事务保存及日志里。
被事务
START TRANSACTION 或 BEGIN

付出业务(关闭工作)
COMMIT

放弃工作(关闭工作)
ROLLBACK

折返点
SAVEPOINT adqoo_1
ROLLBACK TO SAVEPOINT adqoo_1
出在折返点 adqoo_1 事先的事体让提交,之后的于忽略

工作的停

装“自动提交”模式
SET AUTOCOMMIT = 0
诸条SQL都是和一个政工之差命令,之间由于 COMMIT 或 ROLLBACK隔开
掉线后,没有 COMMIT 的业务都吃放弃

政工锁定模式

系默认:
不需要等某工作了,可径直询问及结果,但未可知还进行修改、删除。
缺陷:查询及之结果,可能是都过的。
瑜:不需要拭目以待某工作了,可径直询问及结果。

得因此以下模式来设定锁定模式

1、SELECT …… LOCK IN SHARE MODE(共享锁)
查询到的数,就是数据库在这等同整日的数目(其他都commit事务的结果,已经影响及这里了)
SELECT 必须等,某个事务了晚才会履行

2、SELECT …… FOR UPDATE(排它锁)
例如 SELECT * FROM tablename WHERE id<200
那么id<200的数据,被询问到的数量,都以非可知再开展改动、删除、SELECT ……
LOCK IN SHARE MODE操作
直顶这业务了

共享锁 和 排它锁 的分:在于是否阻断其他客户有的 SELECT …… LOCK IN
SHARE MODE命令

3、INSERT / UPDATE / DELETE
不无涉嫌数据都见面被锁定,加上排它锁

4、防插入锁
例如 SELECT * FROM tablename WHERE id>200
那id>200底记录无法给插入

5、死锁
自动识别死锁
不甘示弱来的长河被实施,后来之过程收到出错消息,并按ROLLBACK方式回滚
innodb_lock_wait_timeout = n 来安最长等时,默认是50秒

工作隔离模式

SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL
READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE
1、不带SESSION、GLOBAL的SET命令
仅仅针对生一个作业中
2、SET SESSION
否当前对话设置隔离模式
3、SET GLOBAL
为日后新建的保有MYSQL连接装置隔离模式(当前总是不包在内)

隔断模式

   READ UNCOMMITTED
不隔离SELECT
其它事情未得的改动(未COMMIT),其结果吗设想在内

   READ COMMITTED
将其余作业之 COMMIT 修改考虑在内
与一个政工中,同一 SELECT 可能回到不同结果

   REPEATABLE READ(默认)
免将其余作业之改动考虑在内,无论任何业务是否就此COMMIT命令提交了
和一个事情中,同一 SELECT 返回同一结果(前提是按照作业,不修改)

   SERIALIZABLE
跟REPEATABLE READ类似,给持有的SELECT都加上了 共享锁

出错处理
因出错信息,执行相应的拍卖

mysql事物处理实例

MYSQL的事务处理主要出少种植方法
1.用begin,rollback,commit来实现
    begin开始一个作业
    rollback事务回滚
    commit 事务确认
2.直接用set来改变mysql的自动提交模式
    mysql默认是机动提交的,也就算是若付出一个query,就直实施!可以经过
    set autocommit = 0 禁止自动提交
    set autocommit = 1 展自动提交
    来促成工作之处理。
可是如若留意当用set autocommit = 0
的时段,你以后所有的sql都以作为事务处理,直到你用commit确认要
rollback结束,注意当您了结是工作的又为打开了初的政工!按第一栽方法只有将手上底做为一个事务!
MYSQL只生 INNODB和BDB类型的数目表才支持事务处理,其他的类型是勿支持的!
MYSQL5.0 WINXP下测试通过~  ^_^

 mysql> use test;
    Database changed
    mysql> CREATE TABLE `dbtest`(
    -> id int(4)
    -> ) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> select * from dbtest
    -> ;
Empty set (0.01 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(5);
Query OK, 1 row affected (0.00 sec)

mysql> insert into dbtest value(6);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+------+
| id   |
+------+
|    5 |
|    6 |
+------+
2 rows in set (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(7);
Query OK, 1 row affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+------+
| id   |
+------+
|    5 |
|    6 |
+------+
2 rows in set (0.00 sec)

mysql> mysql事务处理

php代码实现工作的处理可以经过PHP预定义类mysqli的以下方法实现。 autocommit(boolean):该方式用于限定查询结果是否自动提交,如果该办法的参数为true则自动提交,如果参数为false则关闭自动提交。MySQL数据库默认为自动提交。
rollback():利用mysqli类中的欠方法好兑现业务之回滚。
commit():利用该法可以兑现提交所有查询。

<?php
include_once("conn.php");

$id=$_GET[id];
$conn->autocommit(false);
if(!$conn->query("delete from tb_sco where id='".$id."'"))
{
  $conn->rollback();
}
if(!$conn->query("delete from tb_stu where id='".$id."'"))
{
  $conn->rollback();
}
  $conn->commit();
  $conn->autocommit(true);
  echo "ok"
?>

列二

<?php
require('connectDB.php'); //建立数据库连接
mssql_query("BEGIN TRANSACTION DEPS02_DEL"); //开始事务
$delete_dep_sql="DELETE FROM TBLDEPARTMENT WHERE DEPTID='{$_GET[deptid]}'";
// echo $delete_dep_sql."<br>";
mssql_query($delete_dep_sql); //操作数据库
// var_dump($del_result);
$delete_result = mssql_query("select @@ROWCOUNT as id");
$delete_info = mssql_fetch_array($delete_result);
$delete_rows = $delete_info[0];
// var_dump($delete_rows);
mssql_free_result($delete_result);
echo "<script language=javascript>";
if(true){    //判断是否回滚提交
mssql_query("COMMIT TRANSACTION DEPS02_DEL"); //提交事务
echo "alert('delete success!');";
}else{
mssql_query("ROLLBACK TRANSACTION DEPS02_DEL"); //回滚事务
echo "alert('delete faile!');";
}
echo "</script>";mssql_close();
?>

例3

 
MySQL的事务处理在处理实际问题面临持有广大且要之动,最常见的动如银行转化业务、电子商务开发业务等等。但是,值得注意的是,MySQL的事务处理功能在MYSIAM存储引擎中凡匪支持之,在InnoDB存储引擎中是永葆之。现在上传一段子代码,作为指引认识MySQL事务处理的起来,简单的实例,但融汇思想,相信会发非常死的增援。

<?php
$conn=mysql_connect('localhost','root','yourpassword')or die(mysql_error());
mysql_select_db('transaction',$conn);
mysql_query('set names utf8');

//创建事务
mysql_query('START TRANSACTION') or die(mysql_error());
$sqlA="update A set account=account-1";
if(!mysql_query($sqlA)){
&nbsp;&nbsp;&nbsp; mysql_query('ROLLBACK') or exit(mysql_error());//判断当执行失败时回滚
&nbsp;   exit();
}
$sqlB="update B set account=account+1";
if(!mysql_query($sqlB)){
&nbsp;&nbsp;&nbsp; mysql_query('ROLLBACK') or exit(mysql_error());//判断当执行失败时回滚
&nbsp;   exit();
}
mysql_query('COMMIT')or die(mysql_error());//执行事务
mysql_close($conn);
?>

如上代码可以看作模拟银行转账业务的事情流程。以表A、B分别表示两单已经于银行开户的账户,当账户A执行反生1冠被账户B的操作时,如果操作实践破产,转生用见面回滚至老状态,不累朝着下实施动作。反之,如果操作实施成功,则账户B可用余额将增加1老大,否则事务回滚至老状态。

 

CREATE TABLE `dbtest`(
    `id` int(4)
) ENGINE=INNODB;

CREATE TABLE `dbtest2`(
    `id` int(4)
) ENGINE=MyISAM;

SELECT * FROM `dbtest`;
SELECT * FROM `dbtest2`;

BEGIN;
INSERT INTO `dbtest` VALUES (5);
INSERT INTO `dbtest` VALUES (6);
ROLLBACK;
COMMIT;

BEGIN;
INSERT INTO `dbtest2` VALUES (5);
INSERT INTO `dbtest2` VALUES (6);
ROLLBACK;
COMMIT;


truncate `dbtest`
truncate `dbtest2`

 

转自:http://www.cnblogs.com/gaopeng527/p/5246708.html

 

一如既往、     什么吃会话跟踪

       
记录用户一段时间内的逻辑上相互关联的异访问请求单过程让“会说话跟踪”。通过用户以历次对劳动请时的唯一标识,可以跟踪会话。

老二、     会话跟踪产生的故

       我们且知晓Internet通信协议可以分成有状态协议及任状态协议,而我辈于WWW上进行的拜会HTTP协议是一个管状态协议,这种协议无法以用户的一个央和另一个事关,这样产生怎么能给我们当网购物的当儿增长商品为?!而会讲话可让当一个与单个用户相互关系的对象,会话跟踪技术好辅助每个用户在Web应用程序中之一定数据,当然它们也可区分不同用户在和一个Web应用程序中之多少,这样咱们就会令我们的购物车被可知发生咱已经挑选了之货品了。

老三、     会话跟踪的机要

    
会话跟踪对今天之电子商务类网站显示更加重点,对于有些可知定制个性化的站点为显示尤其要。如果当Amazon买过东西吧,我们就是明白:这次进的事物,下次咱们更拜访Amazon的时,出现的商品大部分凡同咱们上次采购的货属于同一类或类似上次购入过之货品。这样的落实,就是因上次我们买商品信息被“跟踪”了。

季、     实现会话跟踪的编制

1、Cookies

2、URL重写

3、隐藏式表单域

4、Session机制

Cookies

      Cookies是下最普遍的对话跟踪机制,Cookies是出服务器创建,并将Cookies信息保存于用户机器及之硬盘上,下次用户更访问该站点服务器的时节,保存于用户机器上硬盘的Cookies信息就是为送转让服务器。一般Cookies一般不多于4KB,且用户的敏锐性信息如果信用卡账号密码不应该保留在Cookies中。

URL重写

       URL重用户以每个URL结尾附加标识回话的数码,与标识符关联的服务器保存有关与对话的多少,如我辈看某个新闻的时刻,在地点栏我们一般会看这般的消息:http://www.XXX.com/news?id=??,通常的话id后面的问号表示该条新闻在后台数据库中的新闻表的id。URL重写能够在客户端停用cookies或者不支持cookies的时候仍然能够发挥作用。

隐藏表单域

     
通常,在表单中我们使用隐藏表单域的下会发出这般一句子代码:<input type=”hidden” name=”XXX” 
value=”XXX”/>。通过为type属性赋值为hidden值来贯彻藏,这样用户在浏览的早晚看不到这行代码的数,但是当用户通过查看源代码还是得看出底。

Session机制

      
这个机制使慎用,特别是于访问量很非常之站点,因为这种机制是吧Session信息保存在劳动器端。如果访问量特别可怜之言语,对于服务器的承受力的求有多大是可想而知的。

五、总结

       在现进一步强调个性化服务之时代,WEB会讲话跟踪技术展示尤为重要,但网络时代的消息安全也是越来越重要,到底选择要何种会话机制,不克相提并论,但是个人觉得:首先第一考虑的凡信息的安全性,其次是考虑服务器的承载力。

 

 

Leave a Comment.