<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    使用php實現用戶自助修改密碼

    Posted on 2011-01-15 17:21 幻海藍夢 閱讀(2465) 評論(0)  編輯  收藏 所屬分類: Linux版本管理配置管理
    Subversion是一個很好的版本管理軟件,相比CVS,它可以依托于Apache運行,從而巧妙的繞開非80端口的防火墻的限制。同時,它還具有很 多優秀的功能,如支持文件移動等。因此,作為后起之秀,其已經在市場上占據了一席之地,如:apache、gcc等開源軟件已經開始使用 Subversion作為其版本管理軟件。
        這里我們要解決的問題就是如何讓用戶自助修改用戶密碼的問題。
        典型的Subversion配置如下:

    <Location /svn>
    DAV svn
    SVNParentPath e:/svn

    # our access control policy
    AuthzSVNAccessFile e:/svn/config/svnaccess.conf

    # only authenticated users may access the repository
    Require valid-user

    # how to authenticate a user
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile e:/svn/config/htpasswd.conf
    </Location>

        這里,使用了SVNParentPath以便能夠支持多個庫,其版本庫位于e:/svn下,認證文件為e:/svn/config/htpasswd.conf,授權文件為e:/svn/config/svnaccess.conf
        針對這個配置,我們如果需要修改用戶密碼,典型的操作就是執行htpasswd.exe,如:htpasswd -b username password
        我們要做的也就是如何將這個在web上來實現。

        介紹完基本支持,下面直接說明我的實現方式。
        1、在Apache中增加一個別名,如:svntools,設置該路徑訪問需要認證,認證文件為Subversion的認證文件。
    Alias /svntools "E:/svn/svntools/"
    <Directory "E:/svn/">
    Require valid-user

    # how to authenticate a user
    AuthType Basic
    AuthName "Subversion Tools"
    AuthUserFile e:/svn/config/htpasswd.conf
    </Directory>

        2、編寫index.php文件,內容如下:
    <?
    /*
    Alias /svnmodify "E:/svn/"
    <Directory "E:/svn/">
    Require valid-user

    AuthType Basic
    AuthName "Subversion Tools"
    AuthUserFile e:/svn/config/htpasswd.conf
    </Directory>
    */
    ?>
    <?
    $username = $_SERVER["PHP_AUTH_USER"]; //經過 AuthType Basic 認證的用戶名
    $authed_pass = $_SERVER["PHP_AUTH_PW"]; //經過 AuthType Basic 認證的密碼
    $input_oldpass = (isset($_REQUEST["oldpass"]) ? $_REQUEST["oldpass"] : ""); //從界面上輸入的原密碼
    $newpass = (isset($_REQUEST["newpass"]) ? $_REQUEST["newpass"] : ""); //界面上輸入的新密碼
    $repeatpass = (isset($_REQUEST["repeatpass"]) ? $_REQUEST["repeatpass"] : ""); //界面上輸入的重復密碼
    $action = (isset($_REQUEST["action"]) ? $_REQUEST["action"] : ""); //以hide方式提交到服務器的action

    if($action!="modify"){
    $action = "view";
    }
    else if($authed_pass!=$input_oldpass){
    $action = "oldpasswrong";
    }
    else if(empty($newpass)){
    $action = "passempty";
    }
    else if($newpass!=$repeatpass){
    $action = "passnotsame";
    }
    else{
    $action = "modify";
    }
    ?>

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <title>Subversion 在線自助密碼修改</title>
    </head>
    <body>

    <?
    //action=view 顯示普通的輸入信息
    if ($action == "view"){
    ?>
    <script language = "javaScript">
    <!--
    function loginIn(myform)
    {
    var newpass=myform.newpass.value;
    var repeatpass=myform.repeatpass.value;

    if(newpass==""){
    alert("請輸入密碼!");
    return false;
    }

    if(repeatpass==""){
    alert("請重復輸入密碼!");
    return false;
    }

    if(newpass!=repeatpass){
    alert("兩次輸入密碼不一致,請重新輸入!");
    return false;
    }
    return true;
    }
    //-->
    </script>
    <style type="text/css">
    <!--
    table {
    border: 1px solid #CCCCCC;
    background-color: #f9f9f9;
    text-align: center;
    vertical-align: middle;
    font-size: 9pt;
    line-height: 15px;
    }
    th {
    font-weight: bold;
    line-height: 20px;
    border-top-width: 1px;
    border-right-width: 1px;
    border-bottom-width: 1px;
    border-left-width: 1px;
    border-bottom-style: solid;
    color: #333333;
    background-color: f6f6f6;
    }
    input{
    height: 18px;
    }
    .button {
    height: 20px;
    }

    -->
    </style>
    <br><br><br>
    <form method="post">
    <input type="hidden" name="action" value="modify"/>
    <table width="220" cellpadding="3" cellspacing="8" align="center">
    <tr>
    <th colspan=2>Subversion 密碼修改</th>
    </tr>
    <tr>
    <td>用 戶 名:</td>
    <td align="left"> <?=$username?></td>
    </tr>
    <tr>
    <td>原 密 碼:</td>
    <td><input type=password size=12 name=oldpass></td>
    </tr>
    <tr>
    <td>用戶密碼:</td>
    <td><input type=password size=12 name=newpass></td>
    </tr>
    <tr>
    <td>確認密碼:</td>
    <td><input type=password size=12 name=repeatpass></td>
    </tr>
    <tr>
    <td colspan=2>
    <input onclick="return loginIn(this.form)" class="button" type=submit value="修 改">
    <input name="reset" type=reset class="button" value="取 消">
    </td>
    </tr>
    </table>
    </form>
    <?
    }
    else if($action == "oldpasswrong"){
    $msg="原密碼錯誤!";
    }
    else if($action == "passempty"){
    $msg="請輸入新密碼!";
    }
    else if($action == "passnotsame"){
    $msg="兩次輸入密碼不一致,請重新輸入!";
    }
    else{
    $passwdfile="E:\svn\config\htpasswd.conf";
    $command='"D:\Program Files\Apache Group\Apache2\bin\htpasswd.exe" -b '.$passwdfile." ".$username." ".$newpass;
    system($command, $result);
    if($result==0){
    $msg="用戶[".$username."]密碼修改成功,請用新密碼登陸.";
    }
    else{
    $msg="用戶[".$username."]密碼修改失敗,返回值為".$result.",請和管理員聯系!";
    }
    }

    if (isset($msg)){
    ?>
    <script language="javaScript">
    <!--
    alert("<?=$msg?>");
    window.location.href="<?=$_SERVER["PHP_SELF"]?>"
    //-->
    </script>
    <?
    }
    ?>
    </body>
    </html>

        OK,只要你的apache支持Php,那么使用這個上面這段腳本就能很好的實現自助修改的功能了。
        核心思想是:
        1、利用Subversion的認證文件對上述腳本進行認證,因此能夠確保只有經過認證的用戶才能訪問此腳本
        2、當Apache認證用戶通過后,會將認證信息保存到$_SERVER數組中,用戶名為:$_SERVER["PHP_AUTH_USER"],密碼 為:$_SERVER["PHP_AUTH_PW"]。如此使得我們能夠知道是哪一個用戶要修改自己的密碼以及用戶的原密碼。
        3、利用php能夠執行系統命令的功能,根據上述信息和用戶輸入拼出要執行的命令字符串,使用System()函數進行執行htpasswd.exe,從而達到修改密碼的作用。 

    原文:http://developer.e800.com.cn/articles/2008/63/1212459703177_1.html

    主站蜘蛛池模板: 1000部拍拍拍18勿入免费视频软件 | 亚洲av无码兔费综合| 成人免费福利视频| 久久精品a亚洲国产v高清不卡| 国产好大好硬好爽免费不卡| 亚洲一区二区电影| 亚洲视频免费一区| 亚洲av无码不卡久久| 俄罗斯极品美女毛片免费播放| 久久精品国产亚洲AV| 无码国产亚洲日韩国精品视频一区二区三区 | 国产A∨免费精品视频| 久久久久久曰本AV免费免费| 亚洲精品动漫在线| 啦啦啦中文在线观看电视剧免费版 | 亚洲黄色免费观看| 7723日本高清完整版免费| 亚洲精品色播一区二区| 免费大片黄手机在线观看| 国产精品极品美女自在线观看免费 | 又黄又爽又成人免费视频| 亚洲精品国产首次亮相| 亚洲不卡AV影片在线播放| 在线观看人成视频免费无遮挡| 亚洲男人天堂av| 天天看片天天爽_免费播放| 美女裸免费观看网站| 亚洲国产精品lv| 日韩激情淫片免费看| 久久免费香蕉视频| 国产国产人免费人成免费视频| 久久精品国产精品亚洲艾草网 | 久久国产乱子伦精品免费一| 亚洲天堂免费在线| 亚洲午夜精品久久久久久浪潮| 亚洲成人免费在线| 真人无码作爱免费视频| 老色鬼久久亚洲AV综合| 国产精品成人无码免费| 一区二区免费视频| 女bbbbxxxx另类亚洲|