不向前走,不知路遠;不努力學習,不明白真理
<?php /* cookie基本操作 cookie是一種由伺服器傳送給客戶端的片段資訊,儲存在客戶端瀏覽器的記憶體或者硬碟上。 在客戶對該服務的請求中發回它。 cookie檔案會放在 C:\Documents and Settings\使用者名稱\Cookies 例如此程式生成的cookie檔名 使用者名稱@localhost[1].txt */ //設定cookie $time = time() + 60 * 60; //設定cookie生存時間,必須設定時間.(儲存1小時) //$time = time() + 60 * 60 * 24 * 7 儲存一週 setCookie("user",'yuanchao',$time); //獲取cookie print_r($_COOKIE); echo $_COOKIE['user'];
<?php /* 陣列形態的cookie */ $time = time() + 60 * 60; /* 在setCookie()函式的第一個引數中,通過在cookie標識中指定陣列下標的形式設定。 */ setCookie('user[name]','yuanchao',$time); setCookie('user[age]','30',$time); setCookie('user[sex]','男',$time); foreach($_COOKIE["user"] as $key=>$value) { echo $key .'--' . $value .'<br/>'; }
<?php
/*
刪除cookie
如果刪除在客戶端的cookie,可以使用兩種方法。
第一種:省略setcookie()函式的所有引數列,僅僅只有第一個引數的cookie名稱即可。
第二種:利用setcookie()函式把cookie設定為已過期狀態。即減去-1
*/
//第一種方式
setCookie('user');
//第二種方式
setCookie('user[name]','',time()-1);
基於cookie的使用者登陸模組
--建立使用者表,allow許可權位,1代表有許可權,0代表無許可權 create table user ( id int primary key auto_increment, name varchar(20) not null, pwd varchar(50) not null, allow_1 int(1) not null, allow_2 int(1) not null, allow_3 int(1) not null ); --建立管理員和yc普通使用者 insert into user values(null,'admin',md5('admin'),1,1,1); insert into user values(null,'yc',md5('yc'),0,0,1); mysql> select * from user; +----+-------+----------------------------------+---------+---------+---------+ | id | name | pwd | allow_1 | allow_2 | allow_3 | +----+-------+----------------------------------+---------+---------+---------+ | 1 | admin | 21232f297a57a5a743894a0e4a801fc3 | 1 | 1 | 1 | | 2 | yc | a2bf364d91c65964491d6ef7c0a36c46 | 0 | 0 | 1 | +----+-------+----------------------------------+---------+---------+---------+ 2 rows in set (0.00 sec)
conn.inc.php
<?php
/*
連線資料庫
*/
$mysqli = new mysqli('localhost','root','root','xsphp');
if(mysqli_connect_errno()) {
printf('資料庫連線失敗,失敗原因:%s',mysqli_connect_error());
exit;
}
comm.inc.php
<?php
/*
檢查cookie,判斷是否登陸
*/
if(!isset($_COOKIE["islogin"]) && $_COOKIE["islogin"] != true) {
var_dump($_COOKIE["islogin"]);
header('location:login.php');
}
login.php
<html>
<head>
<title>基於cookie的使用者登陸模組</title>
<?php
if(isset($_POST['sub'])) {
include('conn.inc.php');
$name = $_POST['name'];
$pwd = $_POST['pwd'];
$sql = 'select id from user where name ="'.$name.'" and pwd = "'.md5($pwd).'" ';
//echo $sql;
$result = $mysqli->query($sql);
if($result->num_rows > 0) {
$row = $result->fetch_assoc();
//登陸成功,設定cookie
$time = time() + 60 * 60; //失效時間1小時
setCookie('name',$name,$time);
setCookie('islogin',true,$time);
setCookie('id',$row['id'],$time);
$result->close();
$mysqli->close();
header('location:index.php');
}
$mysqli->close();
echo '登陸失敗!';
}
?>
</head>
<body>
<form action="login.php" method="post" name="myform">
<table border="1" align="center">
<tr>
<td>
使用者名稱:
</td>
<td>
<input type="text" name="name" />
</td>
</tr>
<tr>
<td>
密碼:
</td>
<td>
<input type="password" name="pwd" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="sub" value="登陸"/>
</td>
</tr>
</table>
</form>
</body>
</html>
index.php
<?php
/*
主介面
*/
include('comm.inc.php');
include('conn.inc.php');
$name = $_COOKIE['name'];
$id = $_COOKIE['id'];
echo "歡迎{$name}回來 <br/>";
echo "<a href='logout.php'>退出登陸</a> <br/>";
$sql = "select * from user where id = " . $id;
$result = $mysqli->query($sql);
$row = $result->fetch_assoc();
if($row['allow_1'] == 1) {
echo '您擁有allow_1許可權 <br/>';
}
if($row['allow_2'] == 1) {
echo '您擁有allow_2許可權 <br/>';
}
if($row['allow_3'] == 1) {
echo '您擁有allow_3許可權 <br/>';
}
$result->close();
$mysqli->close();
logout.php
<?php
include('comm.inc.php');
//刪除cookie
setCookie('name');
setCookie('id');
setCookie('islogin');
header('location:login.php');
Session
<?php
/*
Session
session的設定不同於cookie,必須先啟動。
*/
//開啟session,此函式之前不能有任何輸出
session_start();
$_SESSION['username'] = 'hello world';
echo session_id().'<br/>'; //輸出sessionid
echo $_SESSION['username'] .'<br/>';
//輸出pip.ini檔案裡session.name
echo session_name().'<br/>';
<?php
/*
session銷燬步驟
*/
//第一步,開啟session
session_start();
//第二步,刪除所有session變數
$_Session = array();
//第三步,如果是基於cookie的session,使用setcookie()刪除包含session id的cookie
if(isset($_COOKIE[session_name()])) {
setCookie(session_name(),'',time()-3600,'/');
}
//第四步,最後徹底銷燬session
session_destroy();
/*
$_Session = array(); 清空$_SESSION陣列的同時,也將這個使用者在伺服器端對應的session檔案內容清空。
而使用session_destroy();則是將這個使用者在伺服器端對應的session檔案刪除
*/
基於session登陸模組
comm.inc.php
<?php
/*
檢查session,判斷是否登陸
*/
session_start();
if(!isset($_SESSION["islogin"]) && $_SESSION["islogin"] != true) {
header('location:login.php');
}
login.php
<html>
<head>
<title>基於session的使用者登陸模組</title>
<?php
//開啟session
session_start();
if(isset($_POST['sub'])) {
include('conn.inc.php');
$name = $_POST['name'];
$pwd = $_POST['pwd'];
$sql = 'select id from user where name ="'.$name.'" and pwd = "'.md5($pwd).'" ';
//echo $sql;
$result = $mysqli->query($sql);
if($result->num_rows > 0) {
$row = $result->fetch_assoc();
//登陸成功,設定session
$_SESSION['name'] = $name;
$_SESSION['id'] = $row['id'];
$_SESSION['islogin'] = true;
$result->close();
$mysqli->close();
header('location:index.php');
}
$mysqli->close();
echo '登陸失敗!';
}
?>
</head>
<body>
<form action="login.php" method="post" name="myform">
<table border="1" align="center">
<tr>
<td>
使用者名稱:
</td>
<td>
<input type="text" name="name" />
</td>
</tr>
<tr>
<td>
密碼:
</td>
<td>
<input type="password" name="pwd" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="sub" value="登陸"/>
</td>
</tr>
</table>
</form>
</body>
</html>
index.php
<?php
/*
主介面
*/
include('comm.inc.php');
include('conn.inc.php');
$name = $_SESSION['name'];
$id = $_SESSION['id'];
echo "歡迎{$name}回來 <br/>";
echo "<a href='logout.php'>退出登陸</a> <br/>";
$sql = "select * from user where id = " . $id;
$result = $mysqli->query($sql);
$row = $result->fetch_assoc();
if($row['allow_1'] == 1) {
echo '您擁有allow_1許可權 <br/>';
}
if($row['allow_2'] == 1) {
echo '您擁有allow_2許可權 <br/>';
}
if($row['allow_3'] == 1) {
echo '您擁有allow_3許可權 <br/>';
}
$result->close();
$mysqli->close();
使用URL傳遞session id的登陸模組
方法:
第一個方法:手動的在每個超級連結的URL中都新增一個session.
頁面都要判斷一下是否有傳過來的session id, 有則設定一下。
第二個方法:使用pip.ini裡的session.name = PHPSESSID
<a href="連結?PHPSESSID=".session_id()>xxxxxx</a>
就不需要判斷了。session自動找PHPSESSID
第三個方法:
使用常量SID:
該常量在會話啟動時被定義,如果客戶端沒有傳送是的會話cookie,則sid的格式為
session_name = session_id,否則就是一個空字串。
<a href="連結?".SID>xxxxxx</a>
也不需要判斷
第四個方法:
修改php.ini裡的session.use_trans_sid = 1.使用明碼在URL顯示sid.(不建議使用)
第一種方法的程式碼:
login.php
<html>
<head>
<title>基於session的使用者登陸模組</title>
<?php
//開啟session
if(isset($_GET['sid'])) {
session_id($_GET['sid']);
}
session_start();
echo session_id().'<br/>';
if(isset($_POST['sub'])) {
include('conn.inc.php');
$name = $_POST['name'];
$pwd = $_POST['pwd'];
$sql = 'select id from user where name ="'.$name.'" and pwd = "'.md5($pwd).'" ';
//echo $sql;
$result = $mysqli->query($sql);
if($result->num_rows > 0) {
$row = $result->fetch_assoc();
//登陸成功,設定session
$_SESSION['name'] = $name;
$_SESSION['id'] = $row['id'];
$_SESSION['islogin'] = true;
$result->close();
$mysqli->close();
//header('location:index.php?sid='.session_id());
echo '<script>';
echo 'alert("aaaa");';
echo "location='index.php?sid=".session_id()."'";
echo '</script>';
echo '------------------------';
}else {
$mysqli->close();
echo '登陸失敗!';
}
}
?>
</head>
<body>
<form action="login.php?sid=<?php echo session_id();?>" method="post" name="myform">
<table border="1" align="center">
<tr>
<td>
使用者名稱:
</td>
<td>
<input type="text" name="name" />
</td>
</tr>
<tr>
<td>
密碼:
</td>
<td>
<input type="password" name="pwd" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="sub" value="登陸"/>
</td>
</tr>
</table>
</form>
</body>
</html>
commit.inc.php
<?php
/*
檢查session,判斷是否登陸
*/
//判斷URL是否有session id.如果有則設定。必須放在開啟sesion之前。否則session會有新的id
if(isset($_GET['sid'])) {
session_id($_GET['sid']);
echo session_id();
}
session_start();
if(!isset($_SESSION["islogin"]) && $_SESSION["islogin"] != true) {
echo '))))))))))))))))))';
//header('location:login.php');
}
php.ini中與會話session有關的幾個選項
儲存和檢索與胡話關聯的資料的處理器名字,可以使用(files,user,sqlite,memcahce)中的一個值
預設為檔案files,如果想要使用自定義的處理器,可以用user
session.save_handler = user
對於files處理器,此值是建立會話資料檔案的路徑。
session.save_path = "/tmp"
是否使用cookie在客戶端儲存會話id,1表示允許
session.use_cookies = 1
會話的名稱
session.name = PHPSESSID
是否使用明碼在URL上顯示SID(會話ID)。預設禁止
session_use_trans_sid
cookie中的session id在客戶機上儲存的有效期(秒),0表示延續到瀏覽器關閉。
session.cookie_lifetime = 0
傳遞會話id的cookie作用路徑
session.cookie_path = /
Session的自動回收機制
通過在頁面中提供的一個退出按鈕,單擊銷燬本次會話。但使用者如果沒有單擊退出按鈕,而是直接關閉瀏覽器。
或斷網等情況,在伺服器儲存的session檔案是不會被刪除的。雖然關閉瀏覽器,下次需要分配一個新的session id重新登入。
通過在php.ini中設定session.gc_maxlifetime選項來指定一個時間(單位:秒),例如1400(24分鐘)
通過在php.ini檔案中修改session.gc_probability和session.gc_divisor兩個選項,設定啟動垃圾回收程式的概率。
會根據session.gc_probability/session.gc_divisor公式計算概率,例如session.gc_probability=1,session.gc_divisor=100
這樣的概率就是1/100.即session_start()函式被呼叫100次才會有一次可能啟動垃圾回收程式。建議值為1/(1000~5000)
自定義session處理方式。
1、儲存到檔案中。session預設也是儲存到檔案中
session.php
<?php
//在執行session_start(); //啟動
function open($save_path, $session_name){
global $sess_save_path;
$sess_save_path=$save_path;
return true;
}
//session_write_close() session_destroy()
function close(){
return true;
}
//session_start(), $_SESSION, 讀取session資料到$_SESSION中
function read($id){
global $sess_save_path;
$sess_file=$sess_save_path."/glf_".$id;
return (string)@file_get_contents($sess_file);
}
//結束時和session_write_close()強制提交SESSION資料 $_SESSION[]="aaa";
function write($id, $sess_data){
global $sess_save_path;
$sess_file=$sess_save_path."/glf_".$id;
if([email protected]($sess_file, "w")){
$return=fwrite($fp, $sess_data);
fclose($fp);
return $return;
}else{
return false;
}
}
//session_destroy()
function destroy($id){
global $sess_save_path;
$sess_file=$sess_save_path."/glf_".$id;
return @unlink($sess_file);
}
//ession.gc_probability和session.gc_divisor值決定的,open(), read() session_start也會執行gc
function gc($maxlifetime){
global $sess_save_path;
/*
glob() 函式依照 libc glob() 函式使用的規則尋找所有與 pattern 匹配的檔案路徑
返回一個包含有匹配檔案/目錄的陣列。如果出錯返回 FALSE。
*/
foreach(glob($sess_save_path."/glf_*") as $filename){
//檔案的修改時間+檔案生存時間 小於 當前時間,是過期檔案
if(filemtime($filename)+$maxlifetime < time() ){
@unlink($filename);
echo $filename;
}
}
return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy","gc");
session_start();
one.php
<?php
include('session.php');
//session_start();
$_SESSION['username'] = 'yc';
$_SESSION['pwd'] = 'admin';
echo session_name() . '=' .session_id();
two.php
<?php
include('session.php');
echo $_SESSION['username']."<br/>";
echo $_SESSION['pwd']."<br/>";
echo session_name().'='.session_id();
three.php
<?php
include('session.php');
$_SESSION = array();
if(isset($_COOKIE[session_name()])) {
setCookie(session_name(),'',time()-100,'/');
}
session_destroy();
echo 'session已銷燬';
echo session_name().'='.session_id();
生存的sesson檔案
yctupqf4kc44d147sonkqhsfcil1
username|s:2:"yc";pwd|s:5:"admin";
2、使用資料庫處理Session資訊
--建立儲存session資訊表
create table session(
sid char(32) not null primary key, #session id
client_ip char(15) not null, #客戶端IP
update_time int not null, #session的更新時間
data text #session資料
);
mysql> desc session;
+-------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| sid | char(32) | NO | PRI | NULL | |
| client_ip | char(15) | NO | | NULL | |
| update_time | int(11) | NO | | NULL | |
| data | text | YES | | NULL | |
+-------------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)
session.php
<?php
/*
利用資料庫儲存session
*/
class Session {
private static $client_ip ; //客戶端IP
private static $lifetime; //php.ini裡的session的生存時間
private static $time; //當前時間
private static $handle; //資料庫連線物件
/*
初始化物件
*/
private static function init($handle) {
self::$handle = $handle;
self::$client_ip = isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'unknow';
self::$lifetime = ini_get("session.gc_maxlifetime");
self::$time =time();
}
public function start($pdo) {
//回撥函式呼叫類中方法,得用陣列形式
session_set_save_handler (
array(__CLASS__,"open"),
array(__CLASS__,"close"),
array(__CLASS__,"read"),
array(__CLASS__,"write"),
array(__CLASS__,"destroy"),
array(__CLASS__,"gc")
);
self::init($pdo);
//開啟會話,啟用資料庫儲存session
session_start();
}
public static function open($path,$name) {
return true;
}
public static function close() {
return true;
}
/*
讀取資料庫裡session資訊
*/
public static function read($id) {
$sql = 'select client_ip,update_time,data from session where sid = ?';
$stmt = self::$handle->prepare($sql);
$stmt->bindParam(1,$id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
//如果客戶端IP與資料庫IP不一致,session過期
if(self::$client_ip != $row['client_ip']) {
self::destroy($id);
return '';
}
//如果使用者長時間沒有操作,session已過期
if($row['update_time'] + self::$lifetime < self::$time) {
self::destroy($id);
return '';
}
return $row['data'];
}
/*
向資料庫寫入session資訊
*/
public static function write($id,$data) {
//首先判斷資料庫裡是否有此session,如果有更新,沒有插入
$sql = 'select client_ip,update_time,data from session where sid = ?';
$stmt =self::$handle->prepare($sql);
$stmt->bindParam(1,$id);
$stmt->execute();
if($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
//如果session資料沒有改變,或者在30秒改變則更新
if($row['data'] != $data || self::$time > $row['update_time'] + 30) {
$sql = "update session set client_ip=?,update-time=?,data=? where sid = ?";
$stmt = self::$handle->prepare($sql);
$stmt->bindParam(1,self::$client_ip);
$stmt->bindParam(2,self::$time);
$stmt->bindParam(3,$data);
$stmt->bindParam(4,$id);
$stmt->execute();
}
}else {
//插入新的session資訊
$sql = "insert into session values(?,?,?,?)";
$stmt = self::$handle->prepare($sql);
$stmt->execute(array($id,self::$client_ip,self::$time,$data));
}
return true;
}
/*
銷燬session
刪除資料庫裡session資訊
*/
public static function destroy($id) {
$sql = "delete from session where sid = ?";
$stmt = self::$handle->prepare($sql);
return $stmt->execute(array($id));
}
public static function gc($maxlifetime) {
$sql = "delete from session where update_time < ?";
$stmt = self::$handle->prepare($sql);
//當前時間 - session生存時間
$deletetime = self::time - self::lifetime;
$stmt->bindParam(1,$deletetime);
return $stmt->execute();
}
}
try {
$dsn = "mysql:dbname=xsphp;host=localhost";
$user = 'root';
$pwd = 'root';
$opt = array(PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION);
$pdo = new PDO($dsn,$user,$pwd,$opt);
}catch(PDOException $e) {
$e->getMessage();
}
$sess = new Session();
$sess->start($pdo);
執行one.php,two.php頁面。在資料庫裡查詢
mysql> select * from session;
+----------------------------+-----------+-------------+------------------------------------+
| sid | client_ip | update_time | data |
+----------------------------+-----------+-------------+------------------------------------+
| iclle0k85ga6ka8f2532a0gtn3 | 127.0.0.1 | 1523950782 | username|s:2:"yc";pwd|s:5:"admin"; |
+----------------------------+-----------+-------------+------------------------------------+
1 row in set (0.00 sec)
3、使用memcache處理session資訊
memcache.class.php
<?php
/*
用資料庫來同步Session會加大資料庫的負擔。
用檔案儲存,讀取慢。
用memcache來處理session則是非常合適。
memcache的快取機制和session非常相似。另外,memcache可以做分散式。
能夠把web伺服器中的記憶體組合起來,成為一個記憶體池。
*/
class MemSession {
private static $lifetime; //session生存時間
private static $handle; //memcache物件
const NS = 'memcache_'; //宣告一個session名的字首,防止衝突
/*
物件初始化
*/
public static function init($handle) {
self::$lifetime = ini_get("session.gc_maxlifetime");
self::$handle = $handle;
}
public static function start($mem) {
self::init($mem);
session_set_save_handler (
array(__CLASS__,"open") ,
array(__CLASS__,"close") ,
array(__CLASS__,"read") ,
array(__CLASS__,"write") ,
array(__CLASS__,"destroy") ,
array(__CLASS__,"gc")
);
//開啟會話,啟用memcache儲存session
session_start();
}
public static function open($path,$name) {
return true;
}
public static function close() {
return true;
}
public static function read($id) {
$data = self::$handle->get(self::getMemSessionName($id));
//如果無資料
if($data == false || $data == null) {
return '';
}
return $data;
}
public static function write($id,$data) {
//將資料寫入memcache伺服器中
$fun = $data ? 'set' : 'replace';
return self::$handle->$fun(self::getMemSessionName($id),$data,MEMCACHE_COMPRESSED,self::$lifetime);
}
public static function destroy($id) {
return self::$handle->delete(self::getMemSessionName($id));
}
/*
由於memcache伺服器在儲存資料時,已經設定失效時間。
所以不用此函式。
*/
public static function gc($maxlifetime) {
return true;
}
/*
獲取session名
字首+id
*/
public static function getMemSessionName($id) {
$sessionName = self::NS.$id;
return $sessionName;
}
}
$mem = new Memcache();
$mem->connect("localhost","11211") or die("連結memcache伺服器出錯!");
MemSession::start($mem);
在one.php,two.php,three.php中加入memcache.class.php
include('memcache.class.php');
執行頁面檢視memcache伺服器
stats items
STAT items:3:number 1
STAT items:3:age 36
STAT items:3:evicted 0
STAT items:3:outofmemory 0
END
stats cachedump 3 0
ITEM memcache_i0ddovbpsi5cp8gm3pktdh9nm5 [34 b; 1523958760 s]
END
get memcache_i0ddovbpsi5cp8gm3pktdh9nm5
VALUE memcache_i0ddovbpsi5cp8gm3pktdh9nm5 0 34
username|s:2:"yc";pwd|s:5:"admin";
END
還可以通過修改php.ini檔案中的session.save_handler和session.save_path兩個選項,直接將session資訊儲存到memcache伺服器中。session.save_handler=memcache
session.save_path=tcp://localhost:11211
相關推薦
不向前走,不知路遠;不努力學習,不明白真理
<?php /* cookie基本操作 cookie是一種由伺服器傳送給客戶端的片段資訊,儲存在客戶端瀏覽器的記憶體或者硬碟上。 在客戶對該服務的請求中發回它。 cookie檔案會放在 C:\Documents and Settings\使用者名稱\
前路漫漫,不知路在何方!
開學已經,一兩週了,大三的我看著周圍的同學,拿著阿里,京東,美團的實習offer,羨慕又後悔著。 大學,夢開始的時候。由於我大學剛開始,不知道要不要走程式設計師,對著一行了解太淺,導致耽誤了,很長時間,我仔細的算了一下,如果和剛上大學的就開始學的同學算起,大約差了整整一
【為無為,事無事,味無味。】大小,多少,抱怨,以德。圖難乎,其易也;為大乎,其細也;天下之難,作於易;天下之大,作於細。是以聖人終不為大,故能成其大。夫輕諾,必寡信;必多難。是以聖人猶難之,故終無難矣。
每天進步一點點。。。 從2009年畢業到現在,做過Java後臺開發,PL/SQL開發,會編寫shell指令碼,現為兼職開發的MySQL DBA。為人友善誠懇,工作踏實,吃苦耐勞,富有朝氣,激情,以及團隊合作意識。
【sukyle的專欄】著急的事,慢慢地說;大事要事,想清楚說;小事瑣事,幽默地說;做不到的事,不要隨便說;傷人的事,堅決不說;沒有的事,不要胡說;別人的事,謹慎地說;自己的事,坦誠直說;該做的事,做好再說;將來的事,到時再說。
著急的事,慢慢地說;大事要事,想清楚說;小事瑣事,幽默地說;做不到的事,不要隨便說;傷人的事,堅決不說;沒有的事,不要胡說;別人的事,謹慎地說;自己的事,坦誠直說;該做的事,做好再說;將來的事,到時再...
VPP NAT測試,不支援VLAN,在NAT下arp學習有問題,需要手動新增;直連線口ICMP不支援,
================================= CARRIER GRADE NAT - NAT44 README ================================= W
夢飲酒者,旦而哭泣;夢哭泣者,旦而田獵。方其夢也,不知其夢也。 ------莊子.齊物論-節選
麗之姬,艾封人之子也。晉國之始得之也,涕泣沾襟,及其至於王所,與王同筐床,食芻豢,而後悔其泣也。 予惡乎知夫死者不悔其始之蘄生乎 夢飲酒者,旦而哭泣;夢哭泣者,旦而田獵。方其夢也,不知其夢也。夢之中又佔其夢焉, 覺而後知其夢也。且有大覺而後知此其大夢也,而愚者自以為覺
社交向左,AI當立;歲在戊戌,騰訊大急!
躺著賺錢的日子過去了,騰訊結構大調整,好飯真的不怕晚? “認為阿凡達時代才能實現雲端計算”的馬化騰變了。 馬上要20週歲的騰訊,在時隔6年後迎來新一輪的優化調整,並在此次調整正將雲業務從社交網路事業群(SNG)劃分出來,單獨成立雲與智慧產業事業群(CSIG),
我若成佛,天下無魔;我若入魔,佛奈我何!
第一步:解除安裝原有MySQL [[email protected] ~]# rpm -qa| grep mysql //這個命令就會檢視該作業系統上是否已經安裝了mysql資料庫 有的話,我們就通過 rpm -e 命令 或者 rpm -e --nod
【Liigo's blog】當我沉默著的時候,我覺得充實;我將開口,同時感到空虛……
當我沉默著的時候,我覺得充實; 我將開口,同時感到空虛…… 相對於籃球,我更喜歡足球; 相對於象棋,我更喜歡圍棋; 相對於C ,我更喜歡Rust;…… 莊曉立(Liigo),男,80後,山東省梁山縣人,2002年畢業於山東理工大學,十多年來長期從事軟體技術研究和基礎產
【Java那點事 | 學習●思考●分享 | Java技術交流QQ群:83753349】當你的才華還撐不起你的野心時,那你就應該靜下心來學習。豈能盡如人意,但求無愧我心; 努力不一定會成功,但是放棄一定會失敗; 好好學習,天天向上,不求與人相比,但求超越
當你的才華還撐不起你的野心時,那你就應該靜下心來學習。豈能盡如人意,但求無愧我心; 努力不一定會成功,但是放棄一定會失敗; 好好學習,天天向上,不求與人相比,但求超越自己; 知其然,還要知其所以然;...
Django寫一個裝飾器:從首頁點選詳情頁,如已登入,進詳情頁;如未登入,跳轉至登入頁面,登入成功後,跳轉至詳情頁
有的網站需求,如果使用者未登入,能夠進入首頁,但當點選想要進入詳情頁的時候,就會跳轉到登入頁面,登入完成之後,有的需求需要進入首頁;有的需要進入點選登入之前你的意向頁面 第一種:登入之後,進入首頁。 第二種:登入之後,進入登入之前你點選想進入的意向頁面 那麼,對於第一種,登入之後,進入首
讓天下沒有難用的資料庫 » 事諸父,如事父;事諸兄,如事兄
事諸父,如事父;事諸兄,如事兄—出自《弟子規》,最近喜好這本書,看到這句話,心中感慨頗多,想想工作快滿三個月了,這三個月中經歷了從學校走出來,對未來生活工作的憧憬;經歷了為專案釋出熬戰的一個通宵;經歷了五六個人圍在你後面處理緊急問題的時刻;經歷在離家後的一個人過中秋節的三天….
Dragon's Life(聚百家之長,補一己之短。博覽群書,汲取精華;日積跬步,以致千里;傾盡所能,佈道傳承。)
分散式日誌資料處理 在面對業務複雜場景時,實時記錄、提取、分析日誌,成為提高測試效率、監控業務質量、分析定位問題的一種高效手段。 本專欄主要講解基於目前主流的大資料技術,構建一套用於解決上述問題的通用平臺,以及在落地實踐過程中所
發上等願,結中等緣,享下等福;擇高處立,就平處坐,向寬處行。
在Google Nexus 7 ( Version 4.4.2 )平板出現之前,Intent.ACTION_GET_CONTENT開啟相簿會返回如下形式的Uri : content://media/external/images/media/3951
Java中int和Integer的區別:int 是基本型別,直接存數值 ;integer是物件,用一個引用指向這個物件
int 是基本型別,直接存數值 integer是物件,用一個引用指向這個物件 1.Java 中的資料型別分為基本資料型別和複雜資料型別 int 是前者>>integer 是後者(也就是一個類) 2.初始化時>> in
掌控之中,才會成功;掌控之外,註定失敗。
前言 前面介紹了TCP/IP協議族的組成,現在來看最底層的資料鏈路層。 鏈路層 鏈路層目的如下 為IP模組傳送和接收IP資料報。 為ARP傳送ARP請求和接收ARP應答。
戴眼鏡最近眼睛很累,感覺有壓力一樣,眼壓過大;摘掉眼鏡後,感覺又好一些,求專業人士原因?
關鍵:眼壓高,帶眼鏡帶長了時間,眼睛累. 注:本人戴了七六年的眼鏡了,L475,R400度的樣子(視力:L1.0 R1.0),最近一年來眼睛突然很累,脹。有人說可能是青光眼,所以很擔憂,難道我才25歲就有青光眼了嗎? 感謝!! 一.我去了北京武警總醫院,北京協和醫院,北京
事非宜,勿輕諾;苟輕諾,進退錯。
設計圖尺寸計算方法 單塊螢幕解析度(一般為1920x1080),根據橫排和豎排數目換算比例,根據主流顯示器解析度1920x1080,得到一個縮放值。將得到的縮放值賦予文件的body的scale屬性,這樣就可以在可視區域最大範圍內看到頁面整體的效果了。當然如果是
程式設計師職業思考與規劃 —— Java程式設計師年度總結:淺談四點心得,也許路走得更遠
一、技術積累 (1)程式碼規範 1.1.1、通常的模組分佈: 一般如果你要實現一個web應用,你從後臺將資料展示到前端頁面,在一個比較大的公司,你少不了跟其他專案有交集(你呼叫他的介面,他依賴你的介面),這樣下來,整個公司有很多個模組,怎麼做到很好的聯絡。回到剛剛的
重走JAVA程式設計路:Js中self,top,parent,opener詳解,傻傻分不清楚
昨天專案遇到的問題:取上級window視窗物件時,傻傻分不清楚!你能分清楚嗎? 當我們在瀏覽器中開啟一個網頁時,瀏覽器都會建立一個視窗物件,這個視窗就是一個window物件。也就是Js生存依附的全域性環境物件和全域性作用域物件。 1.Self 指當前視窗頁面,就是wind