- ベストアンサー
登録確認メールで、24hのみ有効にしたい
ユーザー登録をした際、ユーザー宛確認メールを送信しているのですが、 リンクの有効期限設定の仕方が分かりません。 例えば、24hのみ有効にしたい場合、具体的に、どのように実装するのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1です strtotime('-24 hour')より前の日時ならアウト と書いたのに >//タイムスタンプを渡して 24h以内で条件式 >if(strtotime('-24 hour', $hoge)){ となっている時点で「もうちょっと考えて欲しい」とは思います。現在時刻との比較対象をするならデータベースの日時+24 hourですよね(私が提示したのはデータベースの日時と比較するチェック日時です)。 #というか比較演算子を書いていないので(何と比較 #するか提示されていないので)何とも言えませんが >条件式で判定せずに、cronを使ったやり方もアリなのでしょうか? 24h経過していても次のcron実行まで削除されませんから、cronの動作間隔の時間ズレてしまうのが「気にならない」ならどうぞ。私はそういうシステムは嫌いなので。というか、cronで削除するSQL文のwhere条件が書けるなら、同じwhere条件の逆をチェック用のスクリプトの条件に追加すればいいだけです(ハッシュの条件とともに「24h経過していないデータ」という条件をandで付加する)。なので解としては 1.if文で条件判定してやるべき もしくは 4.「SQL文に24h経過していない」という条件を付加する です。cronでの削除に頼るやり方はお勧めしません(万一cronが動かない状態になったらどうするのか・・・)。
その他の回答 (1)
- shimix
- ベストアンサー率54% (865/1590)
確認メールのリンクからアクセスされたときにチェックするためのデータは存在するんですよね? データベースであればレコードに作成日時の列があればいいですし、ファイルであればタイムスタンプでチェック出来ると思います(strtotime('-24 hour')より前の日時ならアウト)。
補足
回答ありがとうございます。 >データベースであればレコードに作成日時の列があればいい データベースにdatetime型でレコード作成日時を保持しているのですが、 下記やり方で合ってるでしょうか? //hashを元にレコード作成日時取得 $hoge = "DBから取得"; //タイムスタンプに変換 $hoge = strtotime($hoge); //タイムスタンプを渡して 24h以内で条件式 if(strtotime('-24 hour', $hoge)){ また、24h以内にアクセスがなかったレコードは、 cron削除するしか方法がないのでしょうか? 仮にcron削除しか方法がないとすると(どうせcron削除するなら)、 条件式で判定せずに、cronを使ったやり方もアリなのでしょうか? →24h経った時点で該当レコード自体を削除することにより、hashからレコード取得ができなくなるので どういった方法が最適か分かんないので、教えてください 1.if文で条件判定してやるべき 2.cronでやっても良い 3.「if文」「cron」どちらでも良い
お礼
回答ありがとうございました。 参考になりましたー