の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
倉金家ホームページ
趣味の部屋/ホームページ余話
|
|
2011年10月8日 |
2011年10月31日 修正 |
今は自前のインターネットサーバーを使っているのでユーザ認証とかはサーバーの機能で自由にできますが、その昔、格安のレンタルサーバーを使っていたときにはそれができませんでした。 そのときにとった方法。手軽な簡易認証としてそれなりに使えると思います。 |
|
|
むか〜しむかし、インターネットというものがしょみんのあいだにもふきゅうしはじめたころ、さっそくぱそこんとやらをかってほーむぺーじあそびなるものをはじめたものずきなおじさんがいたそうな...
...というわけで、私がホームページを作成しはじめた頃、サーバーは超安価な(月額500円くらいだったかな?)ホームページ用共用レンタルサーバーを探してそれを使っていました。プロバイダのを使わなかったのは容量が少なかったのと自分のドメインを使いたかったからです。 昔のことで当然安いなりに .htaccessやCGI、SSI、SSLなどは使えません。(使いたければもっと金を出せということだね。)
しかしサークルなどの写真も載せたりするにあたりプライバシー保護の点からパスワード認証などの必要性が出てきました。 サーバーをグレードアップすればサーバー認証が可能ですが、ただそれだけのために倍もお金は出したくありません。
|
そこでない知恵しぼって考えたのが、こんな方法。 当時のページはもうありませんが、こんなふうにやったなというのを懐かしく思い出しながら書いています...書き方は今流になっていますが。 通常のページへのリンクの代わりに以下のようなコードを置きます。 <form autocomplete="off">秘密のページ(パスワードが必要です)<br> PASSWORD: <input id="password" type="password" size="16" style="border:inset silver 1px"> -> <input type="button" value="GO!" onClick='javascript:if(pw=password.value){location.href=pw+".html";}else{location.reload();}' style="border:outset silver 2px"> </form>
|
|
そうすると、このように表示されます。 ためしに"sitemap"あるいは"menu"と入れてGO!してみてください。 このサイトの記事一覧が表示されます(べつに秘密でもなんでもないけど)。 戻るボタンでお戻りください。
|
からくりはコードを見てすぐおわかりかと思います。 一見パスワードを入れているようですが、実はファイル名"hogefuga.html"の".html"を除いた部分、実質的にファイル名を入れてもらっているのです。(.htmlまで入れさせるとばればれになってしまう!) もちろんファイル名でなくディレクトリ名を指定するよう変更してもかまいません。 仮にコードを見られても"hogefuga"の部分は全く見当はつきませんので、よく使うようなファイル名を用いない限り簡単に推定はされません。
多少の欠点は、パスワードを間違えたときにAuthentication requiredではなくObject not foundのエラーページが表示されてしまうこと。 でもパスワードを間違えてエラーになったと思えばそれまでで、普通の人はそこまではまず気がつきません。 それと、パスワードのあと表示されたページをブックマークしたり教えられたりするとパスワードは効かないこと。 以前はこの対策にcookieも使った覚えがありますが、今思えばそれも完全ではありませんでした。javascriptでcookieを確認して差し戻すようにしましたが、javascriptを無効にされるとそれも効かないからです。でもそれ以上は特にやりませんでした。 cookieを確認してだめなら差戻し、よければjavascriptで表示するようにすればもう少しよかったのかもしれません。(それでもソースを見られるとわかっちゃうけどいちいちソースを調べて見にいく人もいないだろう。)
そうは言っても簡単にしかけられますし、豪華にやりたければ「LOGIN PAGE」などというページでも作って背景画像やナレーションなど入れてやればそれなりにもっともらしく見えますので、遊びの範疇で手軽に閲覧制限をしたい場合やロボットよけには便利です。 ただしサーバーのインデックス機能(存在しないページを指定したときページの一覧を表示する機能)が有効だとこの方法は全然意味ありません。
同じようなことを考える人はやはりいるもので、今検索すれば似たようなのやもっと凝ったやりかたがたくさん出てきます。
ふと昔を思い出して書いてみました。おそまつ。
|
|
|