2011年9月29日 星期四

心得 PHP 使用 htacess 登入登出(authentication ) 問題

  使用 .htacess 來實作 登入登出(authentication ) ,有一個問題 ,


  •    若是想要作到切換使用者的方法,要使用一些額外的方式才能達成。
  •    使用 .htacess 登入之後 , 會吧帳號 密碼存到這些變數 PHP_AUTH_USER (帳號), PHP_AUTH_PW(密碼) ,PHP_AUTH_TYPE(認證型別) [1]
            不過若強制 更新 這些值 是不行的,無論是使用 , unset 卸載 或是 session_destroy() [2];     也都在 firefox 或 chorme 是行不通的, 原因是它們會存到自己的快取,只有關閉瀏覽器材會消失。 不過我在 IE 是也不行




  • 原本有考慮過新增一個logout 頁面 當呼叫的時候 就自動關閉網頁,不過很遺憾 只有 ie 支援 window.close(),  firefox 或 chorme  雖然也有找到關閉分頁的 javascript 語法 不過也沒找到 關閉整個瀏覽器的函式,不過想想也不 合邏輯 ,就放棄這方法


-------------------------------------------------

  因此,參考查到的資料, 大方向就是分成兩部份一是 IE 系列的瀏覽器,另一是其他 FF 和 Chrome.

  • IE 系列: 可參考[1] 的方式 , 呼叫 下面的 function , 在加上一個 變數 logout 當 logout.php 呼叫的時候存入 session.
function authenticate() {
 header('WWW-Authenticate: Basic realm="Test Authentication System"');
header('HTTP/1.0 401 Unauthorized');
 echo "You must enter a valid login ID and password to access this resource\n";
exit; }
.



  • FF 和 Chrome, 使用[1] 的方法也不行,我想原因也是存到 catch 的關係, 所以可以採用 [3] 的方式 , 使用 http://fake:fake@localhost/index.php 的方式,剛好這方始IE 也不是用這種語法... ,  不過 使用 這種方式我自己實驗的結果是每切換一個頁面就必須重新輸入一次帳號密碼,囧。 目前我想到的方式 就只好改成多一個頁面輸入帳號密碼,在傳入下面的 暫存網址  http://account:password@localhost/logoutTemp.php 。  以帳號密碼登入之後,整個網域都會用這個身份存取,在此我使用暫存網址的公用是隱藏帳號密碼, 用 javascript  : location.href= ("http://Host/index.php"); 來隱藏,不然都會出現帳號密碼。不過第一次傳輸的時候帳號密碼還是會被看到,還好目前先應用到公司內網。 



附註:可以使用
  strpos($_SERVER["HTTP_USER_AGENT"],"MSIE")
來判斷 是否為IE 瀏覽器 [4].

參考:

[1]. 章 16. 用 PHP 進行 HTTP 認証, PHP 手冊
[2]. PHP Code to Log a User Out,PHP Tutorials
[3]. .htaccess Logout,bytes > php > php questions
[4]. Something Useful,PHP

Dropbox 用網頁分享自己的影片

     在預設中若分享在 dropbox 分享影片的話,會是一個下載的連結,不過 chrome 可以直接撥,不過影片大的話還是會 lag.

   若要開啟這個功能的話,在網頁登錄後, 連結 下面的網址
        https://www.dropbox.com/enable_shmodel
 就可以開啟,
 點選 Get shareable Link





 就可以線上預覽放了



參考:
My Issues with Dropbox while facing a client deadline (service is bait & switch)   , Dropbox          

2011年9月23日 星期五

心得 php register_globals

接到 前人的php 程式,也許是不熟得關係查了好久, 原來是前人把 全域變數打開了,也就 是register_globals選項是開得。

而預設安裝php 是關閉的....。



  • register_globals 關閉的話 就要使用比較嚴謹的語法,比如 

      存在 seeeion 中的變數 foo


      要取得的話 必須呼叫
     $_SESSION['foo'];
     但若 on 的話 直接呼叫 $foo 即可


參考:

http://blog.xuite.net/samba2005/blog/15425755


2011年9月20日 星期二

心得 PHP htaccess 及.htpasswd 帳號登入設定

感覺用起來 htaccess 就像是一個 filter. 不過預設不一定是會開啟支援的,至少 WAMP 我安裝後是沒有的。


  •  要使用的話必須確認 在 httpd.conf 中 mod_rewrite.so 有無開啟 詳細可以參考[1],或google 一下 'htaccess PHP'。


  •           至於要設定密碼的話, 在 .htaccess  設定, 可以參考[2]:

  

  AuthName 'My Test'
  AuthType Basic
  AuthUserFile E:/wamp/ServerPass/.htpasswd 
  require valid-user

          注意  .htpasswd 這裡要用絕對路徑比較簡單, 至於密碼的話 加密可以在 google 一下



  •  .htpasswd 的密碼格式 ,如
    • admin:123456789         

    

 參考:
[1]: 檢測.htaccess 是否啟用, PHP 程式 學習 筆記本
[2]: WAMP - .htaccess & .htpasswd

2011年9月19日 星期一

心得 Jquery Select option 回上一頁錯誤


如下圖的操作方式, 圖一點選上一頁到圖二。


  • 我的構想是由 select option 來切換頁面,並且在 select 的標題顯示現在的選項
  • 切換是同一個頁面,但利用HTTP doGet 的方式判斷顯示的資料


但出現了bug,

  •  在使用 瀏覽器的上一頁或 javascript 的 window.history.back() 呼叫,選項卻沒辦法回到上次的選項..... , (圖二應該要兩個都是 Today
  •  不過顯示原始檔的內容卻是沒錯
  • 圖中我是顯示兩個select option 作實驗,出現錯誤的是實際觸發事件的 select option




  圖一  


圖二







參考圖三,但是回到上一頁還是會一樣,所以必須修改 javascript. 




圖三




我在select option 新增一個選項來表示標題 "Choose Interval" , HTML 如下
<select name="s" id="select-choice-custom" data-native-menu="false"> 
    <option value="0" selected >Choose Interval</option> 
    <option value="1" >Today</option> 
    <option value="2" >3 Month</option> 
    <option value="3" >Life Time</option> 
 </select>



此外使用javascript 來設定每次 select選項都設為 標題,如下面程式碼, 至於 選擇的範圍就在找其他地方顯示了

$(document).ready(function (){
    var myselect = $("select#select-choice-custom");
     myselect.val("0"); 
     myselect.selectmenu("refresh"); // 記得要 refresh
 });





圖四



圖五





參考: http://jquerymobile.com



2011年9月8日 星期四

心得 css span 固定寬度

 css 在 'span' tag 中設定 寬度 不能只設定 width 屬性而已, 簡單的作法 還要加入 "display: inline-block;"


如:
<span style="width:300px; display: inline-block;"> </span>



  我試過  Chrome v10, FF 6 , ie8  都可以




  為何要用呢,因為在手機上 有 翻轉的功能,  我希望 變成寬螢幕時能夠 把 三行 的訊息 變成一行


參考: TIPS-XHTML下如何強制指定SPAN寬度,黑暗執行緒


2011年9月6日 星期二

心得 Flot 畫圖 時區問題

若要使用 Flot 畫圖有想要設定時區的話, 還是老老實實的 從server 吧 時間的變數轉好(我是過要轉成long 格式),要在 client 端 設定時區目前還是不支援。


參考: http://efreedom.com/Question/1-5663821/Time-Zone-Problem-Flot-JQuery-Plugin

心得 json eval 在手機上網無法顯示狀況

  嘗試一下利用AJAX 呼叫 json 的方式在網頁上讀取, 配合的 library 還包含 jquery.mobile 和 flot , 不過使用AJAX Post 回傳摭取直的時候 利用 eval 的方式 可以在一般電腦網頁上的FF 和 Chrome 是可以執行取得json, 不過 在我的 Android 2.1 下是不行的... ,估計應該是手機版的瀏覽器對於 eval 的支援比較差。

我也用過 JSON.parse 不過直接跳到 complete.

所以我還試紙好用伺服器來取得直接寫入, 不過這樣 AJAX 的 loding  動畫我就不知道在哪放了,只好放棄用loading動畫了。

2011年9月1日 星期四

心得 JQuery 繪圖 Plugin , jqPlot 和 Flot

介紹一下兩個繪圖的plugin, jqPlot  和  Flot  , 我主要是用在手持裝置上顯示圖片的,因為flash 在手持裝置上執行有些地方含是有問題,像我的 android 2.1 手機就不行。

個人心得
jqPlot  :

  •     支援JSON 格式的文件
  •     Sample 比 Flot多
  •    官網文件比較多,而且有整理過
  •   官網:   http://www.jqplot.com/

   Flot :
  
  •     同樣也支援JSON 格式的文件
  •    可以支援 JQuery Mobile, jPlot 目前版本沒辦法顯示圖形(或很難我不會用) ,
  •  目前我搭配最好的各版本 jquery 1.5.x,  jquery.mobile-1.0a4.1.min.js, flot 0.7, 
    • 主要是 flot 0.7 是以 jquery 1.5.x 為基礎的,看他所附得lib 就可以看到
    • jquery.mobile 目前最新的是 jquery.mobile-1.0b2 但是用起來搭配  jquery 1.6.x 比較好
  • 官網: http://code.google.com/p/flot/

心得 jquery mobile 撰寫 手持裝置網頁的好幫手

不得不推薦一下 jquery mobile 這個 plugin, 利用簡單的預設套件就可以做出配合觸碰及有質感的網頁 ,
附帶一題 他是使用HTML5 的功能,


詳細參考可參閱 官方網頁: JQuery Mobile Framework.