アプリ版:「スタンプのみでお礼する」機能のリリースについて

JavaScriptかデータベースの保存データでURLを生成したいのですが、アドバイス頂いた際にデータベースの保存データの方が一般的で良いのではないかと教えて頂きました。
Javascriptのランダム文字列についても別の方に詳しくお聞きしたところ、そちらの方がセキュリティ上は良さそうな気がしております。
どちらが良いか決めかねているためアドバイスお願い致します。

・Javascriptについて、生成したURLをデータベースに保存する方法で、データベースがURLを持っているのでそのまま使えて楽です。
リンクURLにも使えるし、アクセスされたURLからその質問をデータベースから読み出すこともできます。


・データベースの保存データについて、データベースに保存されているIDなどから生成する方はURLをデータベースに保存しなくていいはずです。
データベースがURLを持っていないためその都度生成処理や復号処理が必要です。
リンクURLを出力する、アクセスされたURLからIDなどへ復号(戻す)してからその質問をデータベースから読み出す必要があります。
URLをデータベースに保存してもいいとは思いますが、それならJavaScriptで生成するのと変わりありません。

※JavascriptでURLを生成する方法
https://mebee.info/2022/11/05/post-84690/

https://k-sugi.sakura.ne.jp/javascript/5355/

A 回答 (5件)

> 指しているIDというのは同一のURLのことでしょうか?



URLでもデータベースでも関係ありません。

修正/削除/表示する記事を指定するためには、データベース上で他の記事とは絶対に重複しない値または文字列が必要です。
今回はその「絶対に重複しない値または文字列」を「ID」と書きました。


> (1)の方法でないとデータベースのみで作成するのは難しいという認識であってますでしょうか?

ちょっと違います。
データベースのストアードプロシージャを「データベースの機能」と捉えれば、(2)の方法も「データベースのみ」で作成可能です。

方法自体はどちらも簡単です。
難しいのは、他の邪魔が入らないようにすることです。
    • good
    • 1
この回答へのお礼

アドバイスありがとうございます、(1)の方法をとることにしたのですが、UUIDで一意のIDを生成したいと考えております。

UUIDは重複する確率が低いとは言え、重複しないとは言い切れないためUNIQUE KEY を指定するつもりです。

こちらの方法で問題ないでしょうか?

https://imgur.com/NNIWmBD.jpg

https://imgur.com/jHiDTJk.jpg

https://imgur.com/d0cxxmr.jpg

お礼日時:2023/08/06 16:27

No.2は回答先誤りなので無視していただければ。



で、質問内容や回答の保存・参照用としてMySQLなどのデータベースを利用するなら、回答No.3(kmeeさん)どおり、データベースが生成したユニークIDをそのままURLに利用するほうが手っ取り早いかと。
    • good
    • 1
この回答へのお礼

回答ありがとうございます、了解いたしました。

お礼日時:2023/08/06 16:20

JavascriptでIDを生成する場合、「そのIDが一意である」ことを保証するのが困難です。


ランダムだろうと連番だろうと関係ありません。


一意なIDの作り方には、主に次の2つがあります。
(1) データベースシステムが持つ仕組みを利用する(シーケンス、自動インクリメント等)
(2) IDを生成→既存のデータと比較 → 存在しなければ採用、存在していたら生成からやりなおし

どちらの場合でも「処理の間、他の邪魔が入らない」ことが重要です。
(1)の方はシステムで保証されています。
(2)の方ですが、例えば
 ブラウザ1でID=1を確認;存在しない
 ブラウザ2でID=1を確認;この時点ではブラウザ1で採用されていないので「存在しない」
 ブラウザ1でID=1を採用
 ブラウザ2でID=1を採用;確認時点では存在していなかった
ということが発生する可能性があります。
また
 ブラウザ1でID=1を生成
 ブラウザ2でも新規でID=1を生成→ ブラウザ2で確認→採用
 ブラウザ1で確認→ID=1は使われているので不採用でやりなおし
 ブラウザ1でやりなおしでID=2を生成
 ブラウザ3でも新規でID=2を生成→ ブラウザ3で確認→採用
 ブラウザ1で確認→ID=2は使われているので不採用でやりなおし
 ブラウザ1でやりなおしでID=3を生成 ...
と無限ループになる可能性も0ではありません。

データベースシステムにはトランザクションという「他に邪魔されない」仕組みがあります。
これを使えば(2)の方法でも邪魔されないことが保証できます。
ですが、これは データベース接続→トランザクション開始→処理→トランザクション終了→データベース切断 とする必要があり、これをサーバーとブラウザという仕組みでやるのは困難です。
    • good
    • 1
この回答へのお礼

Q.JavascriptでIDを生成する場合、「そのIDが一意である」ことを保証するのが困難です。
ランダムだろうと連番だろうと関係ありません。

A.アドバイスありがとうございます、指しているIDというのは同一のURLのことでしょうか?


Q.一意なIDの作り方には、主に次の2つがあります。
(1) データベースシステムが持つ仕組みを利用する(シーケンス、自動インクリメント等)
(2) IDを生成→既存のデータと比較 → 存在しなければ採用、存在していたら生成からやりなおし

どちらの場合でも「処理の間、他の邪魔が入らない」ことが重要です。
(1)の方はシステムで保証されています。
(2)の方ですが、例えば
 ブラウザ1でID=1を確認;存在しない
 ブラウザ2でID=1を確認;この時点ではブラウザ1で採用されていないので「存在しない」
 ブラウザ1でID=1を採用
 ブラウザ2でID=1を採用;確認時点では存在していなかった
ということが発生する可能性があります。

ですが、これは データベース接続→トランザクション開始→処理→トランザクション終了→データベース切断 とする必要があり、これをサーバーとブラウザという仕組みでやるのは困難です。

A.説明ありがとうございます、(1)の方法でないとデータベースのみで作成するのは難しいという認識であってますでしょうか?

今後のためにお聞きしておきたいのですが、サーバーとブラウザ間が困難な場合どのような構造になるのでしょうか?

お礼日時:2023/08/04 14:03

本当に切実な悩み相談なら、専門機関(保健所とか弁護士とか。

)を頼ったほうが良いです。
悩みの内容を明らか(それはかなりの覚悟•痛みを伴います。)にしない限り、適切な回答は得られないので。
そこまでできない/したくないのであれば、どこで質問しようと似たりよったりかと。
故に、ここやyahooで妥協しては。
    • good
    • 1
この回答へのお礼

A.回答ありがとうございます、専門でなくても詳しいかたはおられるのではないかと考えております。

お礼日時:2023/08/04 13:38

現代におけるウェブアプリにおいて URL 設計の主眼は


* SEO 効果
* 使う人の利便性
の二つです。
であるならば URL は短く簡潔で解りやすい構造にすべきでしょう。
参考)
https://www.google.com/search?q=url+seo

"JavascriptでURLを生成する方法" は、
URL が長くなりがちで利用者が読みづらくなるので、
避けたほうが良いと思います。
    • good
    • 1
この回答へのお礼

A.回答ありがとうございます、参考にいたします。

お礼日時:2023/08/04 13:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!